C# 带AES256的加密密钥

C# 带AES256的加密密钥,c#,cryptography,aes,C#,Cryptography,Aes,我正在尝试在C#中重新创建此openssl命令: 然后,该加密文件将由设备加载,该过程如下所述: 在密钥前面加一个小写字母–k,它可以是任何纯文本短语,用于生成一个随机的64位salt。然后,结合–k参数指定的秘密,它导出一个随机的128位初始向量和实际的256位加密密钥 因此,在我的C#应用程序中,我需要使用我的“SecretPhrase1234”创建一个随机的64位salt。然后我需要导出一个128位IV和一个256位密钥。该设备已加载密码短语 这是我的密码: AesManaged aes

我正在尝试在C#中重新创建此openssl命令:

然后,该加密文件将由设备加载,该过程如下所述:

在密钥前面加一个小写字母–k,它可以是任何纯文本短语,用于生成一个随机的64位salt。然后,结合–k参数指定的秘密,它导出一个随机的128位初始向量和实际的256位加密密钥

因此,在我的C#应用程序中,我需要使用我的“SecretPhrase1234”创建一个随机的64位salt。然后我需要导出一个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实现非常适合我的需要。在这里:

您认为问题出在哪里?你看到错误信息了吗?它告诉你什么?很好,你发现了一些东西,但也许在发布之前再等一段时间?
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();