在c#中用其他字符串解密字符串

时间:2015-12-31 04:24:05

标签: c# encryption

我有两个字符串如下:

String A = 29CEDC4A435DD625 (key)
String B = 5272B624753D79AF (encodedText)

我尝试通过字符串A解密字符串B以获得结果:8BC141DCC122B74F但是没有成功使用解密函数,如下所示:

public static string Decrypt (string encodedText, string key)
{
    TripleDESCryptoServiceProvider desCrytoProvider = new TripleDESCryptoServiceProvider();
    MD5CryptoServiceProvider hashMD5Provider = new MD5CryptoServiceProvider();
    byte[] byteHash;
    byte[] byteBuff;

    byteHash = hashMD5Provider.ComputeHash(Encoding.UTF8.GetBytes(key));
    desCrytoProvider.Key = byteHash;
    desCrytoProvider.Mode = CipherMode.ECB;
    byteBuff = Convert.FromBase64String(encodedText);

    string plaintext = Encoding.UTF8.GetString(desCrytoProvider.CreateDecryptor().TransformFinalBlock(byteBuff, 0, byteBuff.Length));
    return plaintext;
}

1 个答案:

答案 0 :(得分:0)

我认为从字节数组转换为字符串时遇到麻烦,反之亦然。尝试使用Convert.ToBase64String(...),Convert.FromBase64String(...)。它有效:

    static TripleDESCryptoServiceProvider desCrytoProvider = new TripleDESCryptoServiceProvider();
    static MD5CryptoServiceProvider hashMD5Provider = new MD5CryptoServiceProvider();

    static void Main(string[] args)
    {
        String key = "29CEDC4A435DD625";//(key)

        String encodedText = Encrypt("just4fun", key);
        Console.WriteLine(Decrypt(encodedText, key));
    }

    public static String Encrypt(String text, String key)
    {
        byte[] byteHash;
        byte[] byteBuff;

        var bytes = Encoding.UTF8.GetBytes(key);

        byteHash = hashMD5Provider.ComputeHash(bytes);
        desCrytoProvider.Key = byteHash;
        desCrytoProvider.Mode = CipherMode.ECB;
        byteBuff = Encoding.UTF8.GetBytes(text);

        return Convert.ToBase64String(desCrytoProvider.CreateEncryptor().TransformFinalBlock(byteBuff, 0, byteBuff.Length));
    }

    public static String Decrypt(String encodedText, String key)
    {
        byte[] byteHash;
        byte[] byteBuff;

        var bytes = Encoding.UTF8.GetBytes(key);

        byteHash = hashMD5Provider.ComputeHash(bytes);
        desCrytoProvider.Key = byteHash;
        desCrytoProvider.Mode = CipherMode.ECB;
        byteBuff = Convert.FromBase64String(encodedText);

        return Encoding.UTF8.GetString(desCrytoProvider.CreateDecryptor().TransformFinalBlock(byteBuff, 0, byteBuff.Length));
    }