2012-04-16 10 views
3

私はgnupgを使ってpowershellスクリプトでデータを暗号化および復号化しています。問題はコードにパスフレーズがあることです。それは適切には最善の解決策ではありません。スクリプトにパスフレーズを提供する最も安全な方法はどれですか?ありがとうございました。gpg with powershell - パスフレーズセキュリティ

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

答えて

4

ディスク上のパスフレーズまたはパスワードを暗号化できます。

次の解決策では、というコンピュータをユーザーとして使用します。

次の2つのスクリプトは、securotフレームワーク.NETアセンブリです。

サーバーコンピュータの場合、コンピュータのIDで秘密を保護することができます。このコードでは、コンピュータ上でコードを実行できるすべてのユーザーがパスワードにアクセスできます。したがって、パスワードファイルはネットワーク全体で共有することができ、サーバ自体でのみ解読できます。パスワードファイルにACLを追加すると、一部のユーザーグループだけがACLを読み取ることができます。

Crypting(サーバーコンピュータ上で実行する必要があります):

# 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) 
+0

、JPBlanc、ありがとうございました。私が正しく理解すれば、パスフレーズを一度暗号化し、復号化部分をスクリプトに暗号化します。私はそれをテストし、うまく動作しますが、私はgpg2.exeのパラメータでそれを使用するために復号化されたパスフレーズをどの変数が保持しているのかわかりません。 – culter

+0

OK、私はそれを解決しました。スクリプトにデコード部分を含めて、$ end.GetString($ clearPWD_ByteArray)をパスフレーズとして使用しました。この方法が正しいかどうかを確認してください(安全です)。ありがとう。 – culter

+0

パスフレーズは '$ enc.GetString($ clearPWD_ByteArray)'にあります。 – JPBlanc