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

3
我正在寻找如何在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<"  

我想做的是自动生成与上面示例完全相同的16个字符的随机密钥和IV。
请有人帮我。谢谢...

如果您查看MSDN,您会发现提供程序内置了GenerateIV()方法。同样,密钥也是如此。您需要保留密钥以便解密。 - Ňɏssa Pøngjǣrdenlarp
2个回答

4
使用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)

注意: 你必须使用完全相同的密钥和初始向量才能再次解密数据,因此你必须想办法将它们取回。


感谢您的回答,@Visual Vincent。我会按照您说的去尝试。 - Kingston
2
注意:在处理加密文本时,不要像在问题中那样直接将结果视为字符串,否则可能会丢失关键/IV信息,从而导致加密明文泄露。 - Maarten Bodewes
2
注意:IV不是秘密,因此您可以将其与密文一起发送。通常,它会简单地添加到密文中并在解密之前切掉。当密钥在多次加密中保持不变时,生成新的随机IV很重要。 - Artjom B.

3
Aes类具有内置功能来实现此操作。 aes.GenerateKey() 方法可以用一个新的随机密钥 (大小为aes.KeySize)来替换当前密钥。 aes.GenerateIV() 方法可以用一个新的随机IV (块大小始终为AES的16个字节) 来替换当前IV。
请注意,Aes类的默认实例已经具有随机生成的密钥和随机生成的IV。
(实际上,这个答案适用于.NET中的任何SymmetricAlgorithm类型。)

感谢 @bartonjs 提供的答案。 - Kingston

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接