簡體   English   中英

AES 加密錯誤:輸入的數據不是一個完整的塊?

[英]AES encryption error: The input data is not a complete block?

下面是加密方法:

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。我不明白有什么問題?

此外,只是為了阻止任何關於歐洲央行不好等的建議,這不是用於生產,我只是在玩。

StreamWriter將 UTF8 文本字符寫入流。
您正在編寫plaintext.ToString()作為密文的文本。

這將返回"System.Byte[]" ,它不會轉換為 16 個字節的 UTF8。

我相信問題出在填充模式上。 除非您要加密的文本肯定可以被 BlockSize(以位為單位,或 BlockSize / 8 以字節為單位)整除,否則您應該指定一個除 None 之外的 PaddingMode。

有關示例代碼,請參閱此處帖子

我將功能更改為:

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 encryptor = aes.CreateEncryptor(key, new byte[16]);
        using(var target = new MemoryStream())
        using (var cs = new CryptoStream(target, encryptor, CryptoStreamMode.Write))
        {
            cs.Write(plaintext, 0, plaintext.Length);
            return target.ToArray();
        }
    }
}

這對 PowerShell 有效:如果您在不使用 -key 選項的情況下加密密碼,則可能會發生這種情況。 要修復它,請使用 -key 選項對其進行加密:

ConvertFrom-SecureString -key $key

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM