当前位置: 首页 > 知识库问答 >
问题:

加密AES 256输入明文长度问题

别旻
2023-03-14

从我的安全团队,他们希望我使用AES256密钥强度和CBC模式。我的代码只有当我输入长度为32个字母的输入明文时才起作用,现在我将输入明文改为256 CBC,块大小改为128。

如果我输入“这是一个测试”(不是32个字符长),我会收到:

系统安全密码学。加密异常:输入数据不是完整的块。

如果我输入:“ABCDEFGHIJKLMNOPQRSTUVWXYZ000000”,就行了!

我需要什么代码来使这个工作与“这是一个测试”作为输入。

代码如下:

public byte[] EncryptStringToByte(string plainText, byte[] key, byte[]  vector)
{               
byte[] encrypted;                
using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
{
    aes.BlockSize = 128;
    aes.KeySize = 256;
    aes.Mode = CipherMode.CBC;
    aes.Padding = PaddingMode.None;
    aes.Key = key;
    aes.IV = vector;

    // Create a decrytor to perform the stream transform.
    ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);

    // Create the streams used for encryption. 
    using (MemoryStream msEncrypt = new MemoryStream())
    {
        using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
        {
            using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
            {

                //Write all data to the stream.
                swEncrypt.Write(plainText);
            }
            encrypted = msEncrypt.ToArray();
        }
    }
    }
// Return the encrypted bytes from the memory stream. 
return encrypted;
}

共有1个答案

况弘新
2023-03-14

AES是一个块密码,所以它只适用于具有正好一个块大小的明文。像CBC这样的操作模式使您能够加密块大小的倍数的明文。要加密任意长度的明文,必须使用填充模式

用于分组密码的常见模式是PKCS#5/PKCS#7:

aes.Padding = PaddingMode.PKCS7;
 类似资料:
  • 考虑以下java代码: 此代码输出“”。所以是64字节,而SHA-256是32字节哈希。 我知道我指定了512位(64字节)作为密钥长度 然而,我希望生成的密钥(PBKDF2)将由SHA-256进行散列,这样无论我使用的密钥大小如何,输出都应始终为32字节。 我错过了什么(或者为什么我的期望是错误的)?

  • 问题内容: 我有这个功能(将代码示例的HTML标记剥离)从CSV构建HTML表,但是每次尝试运行它时都会遇到运行时错误,但我不知道为什么。谷歌说,也许编码有些错误,但是我不知道如何更改。 我的CSV以ANSI编码,并包含ä,Ä,Ü,Ö等字符,但我无法控制编码,或者将来是否会更改。 错误发生在这里: 121行是 源代码: 问题答案: 您可以尝试通过使用方法(javadocs)的形式来利用正确的编码。

  • 问题内容: 使用此Gist,我能够在Node.js 0.8.7中成功解密AES256。然后,当我升级到Node.js 0.10.24时,现在看到此错误: TypeError:错误:0606506D:数字信封例程:EVP_DecryptFinal_ex: Decipheriv.Cipher.final(crypto.js:292:27)的最终块长度错误 这是Gist的解密代码(为方便起见,在此处显示

  • 问题内容: 每次我尝试将任何内容推送到GitHub时,它都会询问我地址,然后它要求密码。有没有办法使它自动化? 我正在使用Linux Ubuntu。 问题答案: 您可以用来记住密码(通常,Gnome会自动为您运行密码)。 从现在开始,在您运行此程序的终端中,您的密码将被记住。 理想情况下,它会自动运行,因此在gnome中运行的所有shell都可以工作。查看Gnome Keyring 。

  • 本文向大家介绍PHP实现AES256加密算法实例,包括了PHP实现AES256加密算法实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现AES256加密算法的方法,是较为常见的一种加密算法。分享给大家供大家参考。具体如下: aes.class.php文件如下: aesctr.class.php文件如下: Demo实例程序如下: 这里再介绍另一使用 PHP mcrypt 加解密方