带有 powershell 的 gpg - 密码安全

Posted

技术标签:

【中文标题】带有 powershell 的 gpg - 密码安全【英文标题】:gpg with powershell - passphrase security 【发布时间】:2012-04-16 11:28:42 【问题描述】:

我正在使用 gnupg 通过 powershell 脚本加密和解密数据,问题是我在代码中有密码。这可能不是最好的解决方案。为脚本提供密码的最佳和安全方式是什么?谢谢。

C:\"Program Files"\GNU\GnuPG\gpg2.exe --passphrase mypassphrase --batch --output C:\Z\$decrypted_file.xls --decrypt C:\_Zo\$encrypted_file

【问题讨论】:

【参考方案1】:

您可以在磁盘上加密密码短语或密码。

以下解决方案使用计算机作为用户

以下两个脚本是 securot 框架的 .NET 程序集。

对于服务器计算机,可以通过计算机身份来保护机密。此代码使用的事实是,任何可以在计算机上运行代码的人都可以访问密码。所以密码文件可以跨网络共享,只能由服务器自己解码。您可以将 ACL 添加到密码文件中,使其仅供某些用户组读取。

加密(必须在服务器计算机上完成):

# Mandatory Framework .NET Assembly 
Add-Type -assembly System.Security

# String to Crypt
$passwordASCII = Read-Host -Prompt "Entrer le mot de passe"

# String to INT Array
$enc = [system.text.encoding]::Unicode
$clearPWD_ByteArray = $enc.GetBytes( $passwordASCII.tochararray())

# Crypting
$secLevel = [System.Security.Cryptography.DataProtectionScope]::LocalMachine
$bakCryptedPWD_ByteArray = [System.Security.Cryptography.ProtectedData]::Protect($clearPWD_ByteArray, $null, $secLevel)

# Store in Base 64 form
$B64PWD_ByteArray = [Convert]::ToBase64String($bakCryptedPWD_ByteArray)
Set-Content -LiteralPath c:\Temp\pass.txt -Value $B64PWD_ByteArray

解码:

# Mandatory Framework .NET Assembly
Add-Type -assembly System.Security

# Getting from Base 64 storage
$resCryptedPWD_ByteArray = [Convert]::FromBase64String((Get-Content -LiteralPath c:\Temp\pass.txt))

# Decoding
$secLevel = [System.Security.Cryptography.DataProtectionScope]::LocalMachine
$clearPWD_ByteArray = [System.Security.Cryptography.ProtectedData]::Unprotect( $resCryptedPWD_ByteArray, $null, $secLevel )

# Dtring from int Array
$enc = [system.text.encoding]::Unicode
$enc.GetString($clearPWD_ByteArray)

【讨论】:

谢谢你,JPBlanc。如果我理解正确,我将密码短语加密一次,并将解码部分包含在我的脚本中。我已经对其进行了测试,它工作正常,但我无法弄清楚哪个变量包含解​​码后的密码以在我的 gpg2.exe 参数中使用它。 好的,我已经解决了。我已将解码部分包含在我的脚本中,并使用 $end.GetString($clearPWD_ByteArray) 作为密码。请确认此方法是否正确(安全)。谢谢。

以上是关于带有 powershell 的 gpg - 密码安全的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CLI 上使 gpg 提示输入密码

导出不带密码的 gpg 密钥

禁止 GPG 命令中的密码提示

缓存 GPG 密码以在 Mac 上进行 git 签名

安全与加密之gpg,ssh服务

gpg: gpg-agent 在此次会话中无法使用