繁体   English   中英

如何解密 Rijndael 128 加密文本

[英]How to decrypt a Rijndael 128 encrypted text

我正在尝试解密 Rijndael-128 加密密码,这些是值:

Cipher: "QfJzZ9V6Jm43jYPiVaXP9mu+f88S/JC24saHbOMxxC8="
Key: "45744855535472525844494538555934",
Mode: CBC

Result should be: "abcd@1234"

这个网站似乎可以很好地解密密码: https : //codebeautify.org/encrypt-decrypt

我正在尝试在 C# 中做同样的事情,但绝对没有运气,我在这里错过了什么?

class Program
{
    static void Main(string[] args)
    {
        var text = Decrypt("QfJzZ9V6Jm43jYPiVaXP9mu+f88S/JC24saHbOMxxC8=", Convert.FromBase64String("45744855535472525844494538555934"));
    }

    public static string Decrypt(string Text, byte[] keyBytes)
    {
        var textBytes = Convert.FromBase64String(Text);

        var rijKey = new RijndaelManaged();

        rijKey.IV = textBytes.Take(rijKey.BlockSize / 8).ToArray(); 

        rijKey.Padding = PaddingMode.None;

        rijKey.Mode = CipherMode.CBC;

        var  decryptor = rijKey.CreateDecryptor(keyBytes, rijKey.IV);

        var memoryStream = new MemoryStream(textBytes);

        var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read);

        var pTextBytes = new byte[textBytes.Length];

        var decryptedByteCount = cryptoStream.Read(pTextBytes, 0, pTextBytes.Length);

        memoryStream.Close();

        cryptoStream.Close();

        string plainText = Encoding.UTF8.GetString(pTextBytes, 0, decryptedByteCount);

        return plainText;
    }
}

您的代码的问题是这一行:

rijKey.GenerateIV();

你需要原来的IV。 你不能只使用一个随机的。

如果您访问链接到的站点,每次使用您提供的密钥和文本按 encrypt 时,您都会得到不同的加密文本(因为使用了随机 IV)。 网页必须预先准备用于加密加密文本的随机 IV(或者不太可能,网页正在存储它),这就是它可以解密加密文本的原因。

[您的代码也需要using语句。]

实现 Rijndael 解密时是否可以不使用 IV?

如何在 C# 中使用 Rijndael ManagedEncryption

暂无
暂无

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

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