[英]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.