1

我以这种方式通过base64加密的文本ZIRT

public static string encrypt(string ToEncrypt)
{
    return Convert.ToBase64String(Encoding.ASCII.GetBytes(ToEncrypt));
}

加密后文本变为V2tsU1ZB并且当我尝试使用以下函数解密时

public static string decrypt(string cypherString)
{
    //return Encoding.ASCII.GetString(Convert.FromBase64String(cypherString));

    byte[] data = Convert.FromBase64String(cypherString);
    string decodedString = Encoding.UTF8.GetString(data);
    return decodedString;
}

然后我收到这个文本WklSVA但它应该是ZIRT

请告诉我我的代码有什么问题?

我提供了更多无法解密文本的代码

private void button1_Click(object sender, EventArgs e)
{
    string strTxt = "ZIRT";

    string ss = EnryptString(strTxt);

    string ss1 = EnryptString(ss);
}

public string DecryptString(string encrString)
{
    byte[] b;
    string decrypted;
    try
    {
        b = Convert.FromBase64String(encrString);
        decrypted = System.Text.ASCIIEncoding.ASCII.GetString(b);
    }
    catch (FormatException fe)
    {
        decrypted = "";
    }
    return decrypted;
}

public string EnryptString(string strEncrypted)
{
    byte[] b = System.Text.ASCIIEncoding.ASCII.GetBytes(strEncrypted);
    string encrypted = Convert.ToBase64String(b);
    return encrypted;
}  
4

1 回答 1

1

有解释错误结果的字符串的双重编码。在加密和解密时,您还使用了不同的文本编码。ASCII vs UTF8,这应该是一样的。

以下示例提供了我期望的结果:

        byte[] b = System.Text.ASCIIEncoding.UTF8.GetBytes("test abc");
        string base64Encoded = Convert.ToBase64String(b);
        b = Convert.FromBase64String(base64Encoded);
        Console.WriteLine( System.Text.ASCIIEncoding.UTF8.GetString(b)); 
        // "test abc"

正如评论中提到的,这不是加密,而是编码。

于 2020-07-02T13:56:59.050 回答