我有遗留的 C# 代码,在代码中有一个加密的密码,解密它并使用它。我现在必须更改实际的源值,即base64
字符串需要更改。
解密代码:
var des = new TripleDESCryptoServiceProvider();
var md5Hash = new MD5CryptoServiceProvider();
des.Key = md5Hash.ComputeHash(Encoding.Unicode.GetBytes(...key...));
des.Mode = CipherMode.ECB;
var desDecrypt = des.CreateDecryptor();
var buffer = Convert.FromBase64String(...value...);
var result = Encoding.Unicode.GetString(desDecrypt.TransformFinalBlock(buffer, 0, buffer.Length));
return result;
我正在尝试对更改的值进行临时重新加密,如下所示:
var des = new TripleDESCryptoServiceProvider();
var md5Hash = new MD5CryptoServiceProvider();
des.Key = md5Hash.ComputeHash(Encoding.Unicode.GetBytes(...key...));
des.Mode = CipherMode.ECB;
var desEncrypt = des.CreateEncryptor();
var s = "...new value...";
var b = Encoding.Unicode.GetBytes(s);
desEncrypt.TransformFinalBlock(b, 0, b.Length);
var x = Convert.ToBase64String(b);
这给了我一个很好的base64
价值来替换我的旧常量。但是,当代码尝试解密这个新值时,我得到一个
System.Security.Cryptography.CryptographicException:要解密的数据长度无效。
源值的长度相同。base64 值的长度相同。我知道这不是经营铁路的方法。我只是希望我错过了一些明显、简单和/或愚蠢的东西。