带有AES256的CryptDerive密钥

时间:2012-07-20 18:03:40

标签: c# cryptography aes

我试图在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();

1 个答案:

答案 0 :(得分:0)

我找到了一个完全符合我需要的OPENSSL的.NET实现。是这里: openssl using only .NET classes