C# 查找加密以进行解密

C# 查找加密以进行解密,c#,encryption,C#,Encryption,我有一个遗留的C#代码,它在代码中有一个加密的密码,对它进行解密并使用它。我现在必须更改实际的源代码值,即base64字符串需要更改 解密代码: var des = new TripleDESCryptoServiceProvider(); var md5Hash = new MD5CryptoServiceProvider(); des.Key = md5Hash.ComputeHash(Encoding.Unicode.GetBytes(..

我有一个遗留的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.CryptographyException:密码的长度 要解密的数据无效


源值的长度相同。base64值的长度相同。我知道这不是经营铁路的方式。我只是希望我错过了一些明显的、简单的和/或愚蠢的东西。

看起来你实际上没有使用3DES加密的输出:

var b = Encoding.Unicode.GetBytes(s);
// This returns the encrypted data, but you're not storing it anywhere
desEncrypt.TransformFinalBlock(b, 0, b.Length);
// b is still the original input, not the encrypted data
var x = Convert.ToBase64String(b);
试试这个:

var b = Encoding.Unicode.GetBytes(s);
// Store encrypted data in "e"
var e = desEncrypt.TransformFinalBlock(b, 0, b.Length);
// Convert the encrypted data to base64
var x = Convert.ToBase64String(e);

它是公共私钥策略吗?如果是这样的话,加密和解密就有不同的密钥。坦率地说,我已经很久没有处理过加密了,我从一个洞里就不知道它了。然而,从文件上看,它似乎是对称的,所以我怀疑它是对称的。还要注意的是,在任何地方都没有设置/使用初始化向量。在切线上:它看起来像CipherMode.ECB。您能打印出
缓冲区的大小吗?在这种情况下,它的长度应该是24字节。也许,我认为这超出了给定的代码范围。不知怎的,你丢失了几个字节。铱星已经给出了答案,你用的是纯文本。非常感谢你。现在我想我们可以用“太本地化”来结束这个问题。