c# - AES(rijndael)解密

标签 c# encryption aes rijndaelmanaged

我有一个编码和解码字符串的安全类,但是当我尝试解码时 - 出现了问题。

这是我的安全类:

class Security
{
    public static String encrypt(String imput, String key)
    {
        String cipherText;
        var rijndael = new RijndaelManaged()
        {
            Key = Encoding.Unicode.GetBytes(key),
            Mode = CipherMode.ECB,
            BlockSize = 128,
            Padding = PaddingMode.Zeros,
        };
        ICryptoTransform encryptor = rijndael.CreateEncryptor(rijndael.Key, null);
        using (var memoryStream = new MemoryStream())
        {
            using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
            {
                using (var streamWriter = new StreamWriter(cryptoStream))
                {
                    streamWriter.Write(imput);
                    streamWriter.Flush();
                }
                cipherText = Convert.ToBase64String(memoryStream.ToArray());
            }
        }
        return cipherText;
    }

    public static String decrypt(String imput, String key)
    {
        byte[] data = Convert.FromBase64String(imput);
        String decrypted;

        using (RijndaelManaged rijAlg = new RijndaelManaged())
        {
            rijAlg.Key = Encoding.UTF8.GetBytes(key);
            rijAlg.Mode = CipherMode.ECB;
            rijAlg.BlockSize = 128;
            rijAlg.Padding = PaddingMode.Zeros;

            ICryptoTransform decryptor = rijAlg.CreateDecryptor(rijAlg.Key, null);
            using (MemoryStream msDecrypt = new MemoryStream(data))
            {
                using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                {
                    using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                    {
                        decrypted = srDecrypt.ReadToEnd();                            
                    }
                }
            }
        }
        return decrypted;
    }
}

在program.cs中:

String A = Security.encrypt("text", "1234567891234567");
A = Security.decrypt(A, "1234567891234567");

最后它返回类似的东西:��%����;\0��\a����f6,但我需要原始字符串。我哪里做错了?

最佳答案

在两种方法中使用相同的编码,Encoding.Unicode 或 Encoding.UTF8

关于c# - AES(rijndael)解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27943335/

相关文章:

php - 如何使用aes解密php mysql中的加密数据?

c# - 将元素值反序列化为字符串,尽管它包含混合内容

c# - 更新表时发生 System.Data.SqlClient.SqlException

c# - 如何避免 "Nested transactions are not supported."错误?

c++ - 如何使用 EncFS 和 C++ 加密文件?

c++ - 解密 AES 加密文件,函数导致崩溃

c# - 在 updatepanel 刷新时更改来自 asp.net 代码隐藏的 javascript 变量

php - WSSE - XML SOAP 安全和 key 加密和存储 (EncryptedData/EncryptedKey)

c++ - 尝试使用 Crypto++ RSA 方案加密文件时崩溃

java - 如何将字节数组转换为 key 格式?