0

C# でこの openssl コマンドを再作成しようとしています:

openssl enc –e –aes-256-cbc –k SecretPhrase1234 –in profile.xml –out profile.cfg

この暗号化されたファイルはデバイスによってロードされ、プロセスは次のように記述されます。

秘密鍵の前に小文字の –k を付けます。これは、任意のプレーン テキスト フレーズにすることができ、ランダムな 64 ビット ソルトを生成するために使用されます。次に、–k 引数で指定されたシークレットと組み合わせて、ランダムな 128 ビットの初期ベクトルと実際の 256 ビットの暗号化キーを導出します。

したがって、私の C# アプリケーションでは、「SecretPhrase1234」を使用してランダムな 64 ビット ソルトを作成する必要があります。次に、128 ビットの IV と 256 ビットの鍵を導出する必要があります。デバイスには、すでにシークレット フレーズがロードされています。

これが私のコードです:

AesManaged aes = new AesManaged();

// Encrypt the string to an array of bytes.
aes.KeySize = 256;
aes.BlockSize = 128;
aes.Mode = CipherMode.CBC;

Rfc2898DeriveBytes rfc = new Rfc2898DeriveBytes("SecretPhrase1234", 8);
byte[] SALT = rfc.Salt;
PasswordDeriveBytes pdb = new PasswordDeriveBytes("SecretPhrase1234", SALT);               
byte[] IV = rfc.GetBytes(aes.BlockSize/8);
//The next line doesn't work
byte[] KEY = pdb.CryptDeriveKey("AES", "SHA1", aes.KeySize, IV); 
aes.Key = KEY;
aes.IV = IV;

byte[] encrypted = AESEncryption.EncryptStringToBytes(plainConfig, 
                                                    aes.Key, aes.IV);             
tw.WriteLine(Encoding.ASCII.GetString(encrypted));
tw.Close();
4

1 に答える 1

0

自分のニーズに完全に適合するOPENSSLの.NET実装を見つけました。ここにあります: .NETクラスのみを使用するopenssl

于 2012-07-20T20:31:21.477 に答える