AES加密错误:输入数据不是完整的块? [英] AES encryption error: The input data is not a complete block?

查看:203
本文介绍了AES加密错误:输入数据不是完整的块?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是加密方法:

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)抛出一个异常,说它不是一个完整的块?我正在使用16字节/128位数组,块大小设置为128.我不明白这是怎么回事?

But it keeps throwing an exception at source.Write(plaintext) that says it's not a complete block? I'm using a 16 byte/ 128 bit array with the block size set to 128. I don't understand what's wrong?

此外,只是阻止所有有关ECB不好的建议,这不是用于生产,我只是在玩耍.

Also, just to head off any suggestions that ECB is bad etc, this is not for production, I'm just playing around.

推荐答案

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

StreamWriter writes UTF8 text characters to a stream.
You're writing plaintext.ToString() as text for the ciphertext.

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

This returns "System.Byte[]", which does not translate into 16 bytes of UTF8.

这篇关于AES加密错误:输入数据不是完整的块?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆