强制生成长度为 32 字节(16 个字符)的初始化向量
Force generation of Initialization Vector 32 bytes (16 characters) in length
我想为我的 AES 加密方法生成一个初始化向量 (IV)。我已将密钥大小定义为 256(因为我使用的是 AES),因此我的 IV 需要 32 个字节的长度 (256 / 8)。我希望将 IV 存储为字符串表示形式,因此使用 UTF-8,这相当于一个 16 个字符的字符串。
这是我用来生成的代码和 return IV ...
using (var aesProv = new AesCryptoServiceProvider())
{
aesProv.GenerateIV();
return System.Text.Encoding.Default.GetString(aesProv.IV);
}
如何确保 IV 的长度为 16 个字符?由于我使用的是 AES 库,我可以指望生成 16 个字符的长度吗? AesCryptoServiceProvider
I wish to store the IV as a string representation so using UTF-8, this would equate to a 16 character string.
没有。只是不要这样做。是的,您可以将 32 个字节解释为 UCS-2 序列,但这是一个非常糟糕的主意。这不是自然的文本——它基本上是任意的二进制数据。由于代理对等原因,您很容易得到无效的 UTF-16 代码单元序列。
假设你想要一个你可能能够安全传输的字符串表示等,我建议只使用 base64:
return Convert.ToBase64String(aesProv.IV);
当然,您也可以使用十六进制。当然,这两个都将比 16 个字符长得多,但这是适当处理数据的 "price"。
我想为我的 AES 加密方法生成一个初始化向量 (IV)。我已将密钥大小定义为 256(因为我使用的是 AES),因此我的 IV 需要 32 个字节的长度 (256 / 8)。我希望将 IV 存储为字符串表示形式,因此使用 UTF-8,这相当于一个 16 个字符的字符串。
这是我用来生成的代码和 return IV ...
using (var aesProv = new AesCryptoServiceProvider())
{
aesProv.GenerateIV();
return System.Text.Encoding.Default.GetString(aesProv.IV);
}
如何确保 IV 的长度为 16 个字符?由于我使用的是 AES 库,我可以指望生成 16 个字符的长度吗? AesCryptoServiceProvider
I wish to store the IV as a string representation so using UTF-8, this would equate to a 16 character string.
没有。只是不要这样做。是的,您可以将 32 个字节解释为 UCS-2 序列,但这是一个非常糟糕的主意。这不是自然的文本——它基本上是任意的二进制数据。由于代理对等原因,您很容易得到无效的 UTF-16 代码单元序列。
假设你想要一个你可能能够安全传输的字符串表示等,我建议只使用 base64:
return Convert.ToBase64String(aesProv.IV);
当然,您也可以使用十六进制。当然,这两个都将比 16 个字符长得多,但这是适当处理数据的 "price"。