繁体   English   中英

AES加密和解密

[英]AES encryption and decryption

我不确定如何解释这一点,所以我将添加代码并尝试从那里开始。 如您所见,这几乎没有遵循通用的编程标准。 我试图从密钥和iv代中删除所有“随机性”,所以我提供了自己的字符串并将其适当地添加到AES值中。

将值加密后,将其转换为字符串,并将其作为密码参数存储在数据库中。 我的问题是能够将其解密回原始密码值,以后某些Web请求需要该值。 我尝试将字符串值转换回字节数组,但收到“无效的块大小”错误,然后出现“错误的PKCS7填充。无效的长度250”。 不知道这意味着什么。

有任何想法吗?

    static public void Main()
{
    string original ="{password for testing purposes}";
    string originalkey = "{128 key}";
    string originaliv = "{16 iv}";


    byte[] enckey = Encoding.UTF8.GetBytes(originalkey);
    byte[] enciv = Encoding.UTF8.GetBytes(originaliv);

    using (AesManaged myAes = new AesManaged())
    {
        myAes.Key = enckey;             
        myAes.IV = enciv;
        byte[] encrypted = EncryptStringToBytes_Aes(original, myAes.Key, myAes.IV);
        string result = Encoding.UTF8.GetString(encrypted);

        string roundtrip = DecryptStringFromBytes_Aes(encrypted, myAes.Key, myAes.IV);


        Console.WriteLine("Encrypted:   {0}", result);
        Console.WriteLine("Round Trip: {0}", roundtrip);


        byte[] decrypted = Encoding.UTF8.GetBytes(result);

        roundtrip = DecryptStringFromBytes_Aes(decrypted, myAes.Key, myAes.IV);


        Console.WriteLine("Encrypted:   {0}", roundtrip);
        Console.WriteLine("Round Trip: {0}", result);

   }
       }

您正在获取二进制非文本数据,并将其转换为字符串,然后尝试将其转换回二进制数据。 如果您想存储加密数据的字符串表示形式,我建议使用二进制到文本的编码算法,例如Base64编码(请参阅Base64编码字节数组的有效方法? )。

如果可以将其存储为二进制文件(例如,存储在SQL Server varbinary列中),则可以完全跳过字符串编码。

byte[] encrypted = EncryptStringToBytes_Aes(original, myAes.Key, myAes.IV);
roundtrip = DecryptStringFromBytes_Aes(encrypted, myAes.Key, myAes.IV);

Console.WriteLine("Original:   {0}", original);
Console.WriteLine("Decrypted:   {0}", roundtrip);

问题是您使用的编码。 假设字节数组是UTF8字符串,但我不确定是否是。 使用这个问题的Jon Skeet答案,我将使用以下内容将字节数组转换为字符串并返回:

string result = Convert.ToBase64String(encrypted);
...
byte[] decrypted = Convert.FromBase64String(result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM