【问题标题】:Lost character/s during encrypt-decrypt using rijindeal algorthm in c#在 c# 中使用 rijndael 算法进行加密-解密期间丢失的字符
【发布时间】:2016-08-28 05:38:24
【问题描述】:

我已经实现了代码加密和解密方法。输入字符串值传递给 encrypt 方法并获取存储在 xml 文件中的加密值。在我获得加密值以使用解密方法读取 xml 文件来读取值之后。在极少数情况下我收到错误(加密的输入值不正确且解密的输出值)。我该如何解决这个问题。请分享给我。 这里是示例代码

public static string Decrypt(string cipherText)
{
    try
    {                   


        string incoming = cipherText.Replace('_', '/').Replace('-', '+');
        switch (cipherText.Length % 4)
        {
            case 2: incoming += "=="; break;
            case 3: incoming += "="; break;
        }
        byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
        byte[] cipherTextBytes = Convert.FromBase64String(incoming);
        PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, null);
        byte[] keyBytes = password.GetBytes(keysize / 8);
        RijndaelManaged symmetricKey = new RijndaelManaged();
        symmetricKey.Mode = CipherMode.CBC;
        ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes);
        MemoryStream memoryStream = new MemoryStream(cipherTextBytes);
        CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read);
        byte[] plainTextBytes = new byte[cipherTextBytes.Length];
        int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
        memoryStream.Close();
        cryptoStream.Close();
        return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount);
    }
    catch (Exception ex)
    {                  

          return "Exception";
    }
}

【问题讨论】:

  • 将 Ascii 编码更改为 UTF8 编码。带有删除不可打印字符的 Ascii 编码。我怀疑加密有时会生成 Ascii 编码正在删除的字符。

标签: c#


【解决方案1】:

您要在数据末尾手动添加填充,如果您不在解密时将其反转,则它将不起作用(必须像以前那样在解密后添加)。

但是,同样,填充是不必要的,AES256 需要填充数据,是的,但是加密流会为你做这件事,所以如果你删除所有填充的东西,它会起作用。

【讨论】:

    【解决方案2】:

    使用 Trim() 函数并删除所有空格

    当有空格时,可能会出现此问题。 使用 Trim() 函数删除空格。

    示例-:cipherText.Trim()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 2011-03-26
      相关资源
      最近更新 更多