无法解密不以等号“ =”结尾的文本

时间:2018-12-20 20:13:10

标签: c# encryption base64

我可以加密。但是,如果加密的字符串末尾没有以等号“ =”结尾,那么它将无法正确解密,并且我得到一个空字符串(或看起来是这样)。

有效方法:

  

+ FmU / RQ5jP86j7F6bPjddA ==

     

YQXBLjwEXEGgYz8xnF10O9QqO / vj5DI8PpZZCvfhG1RGHAYumtWrAEBfdSSOkF79vzVCSQ + ejO3uMIDSmY43bw ==

什么是行不通的:

  

xnyfqPsvrEOK8AoQz2p7AGFHoHncZ / wB / R3qr + scts6nLI2xauWnbmYsXsU3iMoT

加密功能:

  return Redirect(Url.RouteUrl(new { controller = "Home", action = "Index" }) + "#" + fragment);

这是解密功能:

    public string EncryptionKey = "abc123";


    public string encrypt(string input)
    {           
        byte[] clearBytes = Encoding.Unicode.GetBytes(input);
        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();
                }
                input = Convert.ToBase64String(ms.ToArray());
            }
        }
        return input;
    }

有什么办法解决这个问题吗?

编辑:添加了加密功能

编辑2:

这就是我调用加密函数的方式(在我通过socket.io发送字符串之前)

   public string decrypt(string cipherText)
    {

        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();
                }
                return Encoding.Unicode.GetString(ms.ToArray());
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

我不会给您完整的答案,也不会讲任何加密技术,因为这是一个很大的话题。 您的问题的答案很简单-只要使用Convert.FromBase64String函数,末尾没有“ =”或“ ==”字符就无法使用,因为这些字符是此编码的特征。 “输出填充”部分中位于此链接下的更多信息:Base64 on Wikipedia 结论:如果加密的字符串附带提到的字符,那么没有它就无法解密。