![](/img/trans.png)
[英]How to append a RijndaelManaged generated IV to data for AES decryption in C#
[英]Generating IV and transmitting AES C#
我正在使用AESCryptoServiceProvider,它在.net框架中以CBC密码模式和PKCS7填充模式提供。 看完几篇文章后,我对生成IV和传输感到困惑,因为CBC密码模式需要独特且不可预测。
当创建新实例或称为generateIV()时,AESCryptoServiceProvider提供IV。 尽管它声明生成了随机IV,但没有提及它是使用CSPRNG还是使用哪个库。 我可以依靠使用generateIV()生成的IV还是应该使用RNGCryptoServiceProvider? IV代还存在其他最佳实践吗?
提前致谢。
在“AESCryptoServiceProvider”,generateIV()方法的使用内部CryptGenRandom()
的advapi32.dll
。
GenerateIV()的方法定义:
public override void GenerateIV() {
Contract.Ensures(IVValue != null && IVValue.Length == BlockSizeValue / 8);
Contract.Assert(m_cspHandle != null);
Contract.Assert(BlockSizeValue % 8 == 0);
byte[] iv = new byte[BlockSizeValue / 8];
if (!CapiNative.UnsafeNativeMethods.CryptGenRandom(m_cspHandle, iv.Length, iv)) {
throw new CryptographicException(Marshal.GetLastWin32Error());
}
IVValue = iv;
}
CryptGenRandom()的签名:
/// <summary>
/// Fill a buffer with cryptographically random bytes
/// </summary>
[DllImport("advapi32", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool CryptGenRandom(SafeCspHandle hProv,
int dwLen,
[Out, MarshalAs(UnmanagedType.LPArray)] byte[] pbBuffer);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.