繁体   English   中英

使用AES256加密密钥

[英]CryptDerive key with AES256

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

我发现OPENSSL的.NET实现非常适合我的需求。 它在这里: 仅使用.NET类的openssl

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM