使用powershell的gpg - 密码安全性

时间:2012-04-16 11:28:42

标签: powershell gnupg

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

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

1 个答案:

答案 0 :(得分:4)

您可以加密磁盘上的密码或密码。

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

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

对于服务器计算机,可以通过计算机身份保护秘密。此代码使用以下事实:任何可以在计算机上运行代码的人都可以访问密码。因此,passwword文件可以在网络上共享,它只能由服务器本身解码。您可以将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)