2012-04-16 2 views
3

Я использую gnupg для шифрования и дешифрования данных с помощью сценария powershell, и проблема в том, что у меня есть кодовая фраза в коде. Это не лучшее решение. Какой лучший и безопасный способ предоставить кодовую фразу для скрипта? Спасибо.gpg с powershell - безопасность парольной фразы

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

ответ

4

Вы можете склеить кодовую фразу или пароль на диске.

следующее решение: компьютер как пользователь.

Следующие два скрипта - сборка securot framework .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) 
+0

Спасибо, JPBlanc. Если я правильно понимаю, я шифрую парольную фразу один раз, а часть декодирования включается в мой скрипт. Я тестировал его, и он отлично работает, но я не могу понять, какая переменная содержит расшифрованную кодовую фразу, чтобы использовать ее в моих параметрах gpg2.exe. – culter

+0

ОК, я решил. Я включаю часть декодирования в свой скрипт и использую $ end.GetString ($ clearPWD_ByteArray) как кодовую фразу. Пожалуйста, подтвердите, является ли этот метод правильным (безопасным). Благодарю. – culter

+0

Кодовая фраза находится в '$ enc.GetString ($ clearPWD_ByteArray)' – JPBlanc

Смежные вопросы