2017-08-08 28 views
0

Linux環境でOpenSSLを使用して証明書の公開鍵で暗号化された秘密を解読するPowerShellスクリプトを設定します。OpenSSLで暗号化されたPowerShellでx509証明書を使用してテキストを解読する

復号化で使用する秘密鍵を持つ証明書は、Windowsローカルマシンの証明書ストアにあります。

これまでのところ、私は暗号化されたファイルからバイトを解読するために [Security.Cryptography.RSACryptoServiceProvider].PrivateKey.Decryptを使用しようとしましたが、私は、パディング

$mycert.PrivateKey.Decrypt($bytes, $true) 
Exception calling "Decrypt" with "2" argument(s): "Error occurred while decoding OAEP padding." 
At line:1 char:1 
+ $mycert.PrivateKey.Decrypt($bytes, $true) 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : CryptographicException 

でエラーを取得する私は、この暗号の例外を解決する方法についていくつかのポインタを取得してもらえますか?

暗号文を含むファイルは、Linuxで次のサンプルopensslコマンドを使用して生成された:

echo " Secret Text" | openssl rsautl -encrypt -inkey publickey.pem -pubin > secret.enc 

これは、OpenSSLで罰金復号化することができますが、PowerShellをしようとしたとき、我々は常に同じエラーを取得します。

+0

公開鍵または秘密鍵でファイルを復号化しようとしていますか?あなたはパブリックを使用しているように見えるエラーに基づいて、あなたは秘密鍵を使用する必要があります。 – Persistent13

+0

@ Persistent13では、平文は公開鍵で暗号化され、暗号文は秘密鍵で復号化されます。 –

答えて

0

openssl rsautlは、-oaepフラグなしで、あなたが呼び出しているDecrypt方法でfalseの値に対応するPKCSv1_1.5パディングを、行います。

Tangentally:あなたはPowerShellの範囲に.NET 4.6 APIへのアクセス権を持っている場合は、より良いcert.GetRSAPrivateKey()を呼び出し、RSA.Decrypt(data, RSAEncryptionPadding.Pkcs1)以降を使用してRSACryptoServiceProvidercert.PrivateKeyをキャストから変更することによって提供されるだろう。古い方法では動作しない証明書/キーがあり、新しい方法があります。

+0

@bartonsjs。ありがとうございました。あなたの答えを渡す前に、私はDecryptメソッドで$ false引数を試してみました。 RSACryptoServiceProviderの新しいAPIを試すようにコードを修正します。私が使用している環境では.NET 4.6にアクセスすることはできませんが、4.5.2までしか使用できません。 –

0

$ mycert.PrivateKey.Decrypt($ bytes、$ false)は、OpenSSLで暗号化コマンドに埋め込みが指定されていない場合に機能します。

関連する問題