代码之家  ›  专栏  ›  技术社区  ›  Antonio Mailtraq

有时c中的Base 64无效字符#

  •  2
  • Antonio Mailtraq  · 技术社区  · 8 年前

    我正在用c#asp开发一个应用程序。net处理保留信息。

    为此,我做了一些研究,并在本教程中从c#分别提出了以下两个加密和解密函数:

    http://www.aspsnippets.com/Articles/AES-Encryption-Decryption-Cryptography-Tutorial-with-example-in-ASPNet-using-C-and-VBNet.aspx

    我已经证实了解密出错的情况,例如

    加密(“a808XXX”)不工作

    加密(“A808XXX”)工作

    加密(“a631XXX”)工作

    加密(“A631XXX”)不工作

    错误是:

    base64无效字符

    我曾尝试应用replace语法,但没有成功:

    Request.QueryString["m"].ToString().Replace(" ", "+")
    

    我下面的代码,如何解决这个问题?

    请帮帮我,提前谢谢你。

    public string Encrypt(string clearText)
    {
        string EncryptionKey = "MAKV2SPBNI99212";
        byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
        using (Aes encryptor = Aes.Create())
        {
            Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
            encryptor.Key = pdb.GetBytes(32);
            encryptor.IV = pdb.GetBytes(16);
            using (MemoryStream ms = new MemoryStream())
            {
                using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(clearBytes, 0, clearBytes.Length);
                    cs.Close();
                }
                clearText = Convert.ToBase64String(ms.ToArray());
            }
        }
        return clearText;
    }
    
    
    
    private string Decrypt(string cipherText)
    {
        string EncryptionKey = "MAKV2SPBNI99212";
        byte[] cipherBytes = Convert.FromBase64String(cipherText);
        using (Aes encryptor = Aes.Create())
        {
            Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
            encryptor.Key = pdb.GetBytes(32);
            encryptor.IV = pdb.GetBytes(16);
            using (MemoryStream ms = new MemoryStream())
            {
                using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(cipherBytes, 0, cipherBytes.Length);
                    cs.Close();
                }
                cipherText = Encoding.Unicode.GetString(ms.ToArray());
            }
        }
        return cipherText;
    }
    
    2 回复  |  直到 8 年前
        1
  •  1
  •   zaph    8 年前

    错误消息:“base64无效字符”已清除。

    调试:找到错误,在错误发生的地方修复错误。不要只是开始尝试。

    加密后打印Base64字符串,解密前再次打印。

    比较寻找差异/腐败。

    验证两个Base64字符串仅包含有效字符“A-Za-z/+”,可能还包含一个或两个尾随“=”字符。

    如果Base64字符串是查询字符串的一部分,则可能需要对其进行URL编码。

        2
  •  0
  •   Andreas Pilavakis    8 年前

    您必须至少替换字符+和/。

    尝试类似的方法

    .Replace("+", "-").Replace("/", "_");
    

    显然,在解密之前,您必须执行相反的操作。