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