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

Vb.net AES密钥和IV生成,长度为16个字符,vb.net,encryption,cryptography,aes,Vb.net,Encryption,Cryptography,Aes,我正在搜索如何在vb.net中生成AES密钥和IV。 如上链接所示,有AesIV和AesKey的声明。 但我不想对AesIV和AesKey使用硬代码 Private Const AesIV As String = "!QAZ2WSX#EDC4RFV" Private Const AesKey As String = "5TGB&YHN7UJM(IK<" Private Const AesIV As String=“!QAZ2WSX#EDC4RFV” Private Co

我正在搜索如何在vb.net中生成AES密钥和IV。

如上链接所示,有AesIV和AesKey的声明。
但我不想对AesIV和AesKey使用硬代码

Private Const AesIV As String = "!QAZ2WSX#EDC4RFV"  
Private Const AesKey As String = "5TGB&YHN7UJM(IK<"  
Private Const AesIV As String=“!QAZ2WSX#EDC4RFV”
Private Const AesKey As String=“5TGB&YHN7UJM(IK使用生成加密强序列

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再次解密数据,因此您必须能够以某种方式将其取回。

使用生成加密强序列

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再次解密数据,因此您必须能够以某种方式将其取回。

Aes
类具有内置的功能来执行此操作。
Aes.GenerateKey()
将当前密钥替换为新的随机密钥(大小为Aes.KeySize)。
Aes.GenerateIV()
将当前IV替换为新的随机IV(块大小,AES始终为16字节)

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


(这个答案实际上适用于任何
SymmetricAlgorithm
type in.NET)。

Aes
类具有实现这一点的内置功能。
Aes.GenerateKey()
将当前密钥替换为新的随机密钥(大小为Aes.KeySize)。
Aes.GenerateIV()
将当前IV替换为新的随机密钥(块大小,AES的块大小始终为16字节)

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


(这个答案实际上适用于任何
SymmetricAlgorithm
type in.NET).

谢谢你的回答@Visual Vincent。我会按照你说的那样尝试。注意:不要像你在问题中那样直接将结果作为字符串处理,否则你可能会丢失密钥/IV信息,从而丢失加密的明文。注意:IV不是秘密,所以你可以将其与密文一起发送。通常,它只是在密文a之前加上nd在解密前被切掉。当密钥在多次加密中保持不变时,生成一个新的随机IV非常重要。感谢您的回答@Visual Vincent。我将按照您所说的那样尝试。注意:不要像在问题中那样直接将结果视为字符串,否则您可能会丢失密钥/IV信息,从而丢失加密的明文。注意:IV不是秘密的,因此您可以将其与密文一起发送。通常,它只是在密文前加上前缀并在解密前切掉。在多次加密时密钥保持不变时,生成新的随机IV非常重要。如果您查看,您会发现有一个
GenerateIV()
provider内置的方法。密钥同上。您需要保留密钥才能解密。如果您查看,您将看到provider内置的
GenerateIV()
method。密钥同上。您需要保留密钥才能解密。感谢@bartonjs的回答。感谢@bartonjs的回答。