簡體   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