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