gpt4 book ai didi

c# - AES加密错误: The input data is not a complete block?

转载 作者:太空狗 更新时间:2023-10-29 20:04:47 49 4
gpt4 key购买 nike

加密方式如下:

public static byte[] Encrypt(byte[] plaintext, byte[] key)
{
using (var aes = Aes.Create())
{
aes.BlockSize = 128;
aes.Mode = CipherMode.ECB;
aes.Padding = PaddingMode.None;

var iv = new byte[16];
for (int i = 0; i < iv.Length; i++)
iv[i] = 0;
aes.IV = iv;

var encryptor = aes.CreateEncryptor(key, aes.IV);
using(var target = new MemoryStream())
using (var cs = new CryptoStream(target, encryptor, CryptoStreamMode.Write))
{
using (var source = new StreamWriter(cs))
source.Write(plaintext);
return target.ToArray();
}
}
}

我是怎么调用它的:

var key = new byte[16] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
var plaintext = new byte[16] { 128, 0, 112, 0, 96, 0, 80, 0, 64, 0, 48, 0, 32, 0, 16, 0 };

但是它一直在 source.Write(plaintext) 处抛出一个异常,说它不是一个完整的 block ?我正在使用 block 大小设置为 128 的 16 字节/128 位数组。我不明白哪里出了问题?

此外,为了避免任何关于 ECB 不好的建议等,这不是用于生产,我只是在玩。

最佳答案

StreamWriter 将 UTF8 文本字符写入流。
您正在编写 plaintext.ToString() 作为密文的文本。

这将返回 "System.Byte[]",它不会转换为 16 字节的 UTF8。

关于c# - AES加密错误: The input data is not a complete block?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19614178/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com