Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AES(rijndael)解密_C#_Encryption_Aes_Rijndaelmanaged - Fatal编程技术网

C# AES(rijndael)解密

C# AES(rijndael)解密,c#,encryption,aes,rijndaelmanaged,C#,Encryption,Aes,Rijndaelmanaged,我有一个对字符串进行编码和解码的安全类,但当我尝试进行解码时,出现了一些问题 这是我的安全课程: class Security { public static String encrypt(String imput, String key) { String cipherText; var rijndael = new RijndaelManaged() { Key = Encoding.Unicode.Ge

我有一个对字符串进行编码和解码的安全类,但当我尝试进行解码时,出现了一些问题

这是我的安全课程:

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

在这两种方法中使用相同的编码,要么是encoding.Unicode,要么是encoding.Unicode.GetBytes(key)=encoding.UTF8.GetBytes(key)?你说得对。我没有注意到我使用了不同的格式。谢谢。我不确定,但是是
Encoding.Unicode.GetBytes(key)==Encoding.UTF8.GetBytes(key)
?你说得对。我没有注意到我使用了不同的格式。谢谢,你说得对。我没有注意到我使用了不同的格式。谢谢,你说得对。我没有注意到我使用了不同的格式。非常感谢。