AES密钥和IV生成,长度为16个字符

时间:2017-03-03 08:16:46

标签: vb.net encryption cryptography aes

我正在搜索如何在vb.net中生成AES密钥和IV http://programmers-en.high-way.info/vb/aes.html
如上所述,有AesIV和AesKey的声明 但我不想为AesIV和AesKey使用硬编码。

Private Const AesIV As String = "!QAZ2WSX#EDC4RFV"  
Private Const AesKey As String = "5TGB&YHN7UJM(IK<"  

我想要做的是我想自动生成随机密钥和IV,就像上面的例子一样,自动生成完全相同的16字符 请帮帮我一个人。感谢...

2 个答案:

答案 0 :(得分:2)

使用RNGCryptoServiceProvider生成加密强序列。

Imports System.Security.Cryptography

Public Function GenerateKey(ByVal Length As Integer) As Byte()
    Dim ReturnArray(Length - 1) As Byte
    Using RNG As New RNGCryptoServiceProvider
        RNG.GetBytes(ReturnArray)
    End Using
    Return ReturnArray
End Function

使用示例:

AES.Key = GenerateKey(16)
AES.IV = GenerateKey(16)

注意:您必须使用完全相同的密钥和IV再次解密数据,因此您必须能够以某种方式将其恢复。

答案 1 :(得分:2)

Aes类具有内置功能来执行此操作。 aes.GenerateKey()用新的随机密钥替换当前密钥(大小为aes.KeySize)。 aes.GenerateIV()用一个新的随机值替换当前的IV(块大小,对于AES总是16个字节)。

请注意,Aes类的默认实例已经有一个随机生成的密钥和一个随机生成的IV。

(这个答案实际上适用于.NET中的任何SymmetricAlgorithm类型。)