繁体   English   中英

生成IV并传输AES C#

[英]Generating IV and transmitting AES C#

我正在使用AESCryptoServiceProvider,它在.net框架中以CBC密码模式和PKCS7填充模式提供。 看完几篇文章后,我对生成IV和传输感到困惑,因为CBC密码模式需要独特且不可预测。

  1. 当创建新实例或称为generateIV()时,AESCryptoServiceProvider提供IV。 尽管它声明生成了随机IV,但没有提及它是使用CSPRNG还是使用哪个库。 我可以依靠使用generateIV()生成的IV还是应该使用RNGCryptoServiceProvider? IV代还存在其他最佳实践吗?

  2. 传输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.

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