【问题标题】:C# FromBase64String fail due to unknown UNICODEC# FromBase64String 由于未知的 UNICODE 而失败
【发布时间】:2015-05-04 22:14:37
【问题描述】:

我有一个加密的数据库,其中的字符串是如下值: ùœ¢Qa³•ù¼?-pJ´'ˆò»Æ8-skYIÞµ§¬†Œ‚„Šç

ù¢=~Òñ€Ï?-pJ´'ˆò»Æ8-skYIÞµ§¬†Œ‚„Šç

XwÚûùÖP^opJ´'ˆò»Æ8-skYIÞµ§¬†Œ‚„Šç

ö'±_|Çúùß^_f9´'ˆò»Æ8-skYIÞµ§¬†Œ‚„Šç

我正在尝试不同的方法来对信息进行解密(这是一种同步加密,我有密钥,但我不知道算法,更多细节在这里How to decrypt a string encrypted by V FoxPro

当我在一个步骤中尝试使用 C#.NET 进行不同的加密方法时,我在以下行中收到 àn 错误,提示“字符串具有非 base64 字符”:

Convert.FromBase64String(input)

输入是一个类似于我上面分享的字符串。

我怎样才能从 DB 接收到这样的字符串以便在 C# 中使用它?

【问题讨论】:

  • 你应该去学习什么是 Base64 编码。您似乎只是复制+粘贴了一些代码而没有理解它..上面的字符串显然不是base64编码的。
  • 我知道这不是 Base64... 出于这个原因,我发布了这个问题。那么,你知道是哪种编码吗?
  • 那你为什么Convert.FromBase64String(input)?无论如何,如果你不知道加密算法,你的问题比编码更大..
  • 没有任何代码(关于你是如何获得这些数据的),这个问题是无法回答的。您的“字符串”并不是真正的字符串,它可能是 byte[]

标签: c# encryption utf-8 decode encryption-symmetric


【解决方案1】:

我通常使用这样的东西:

public static class EncryptDecryptString
{
    public static string Encrypt(string input, string key)
    {
        byte[] inputArray = UTF8Encoding.UTF8.GetBytes(input);
        TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
        tripleDES.Key = UTF8Encoding.UTF8.GetBytes(key);
        tripleDES.Mode = CipherMode.ECB;
        tripleDES.Padding = PaddingMode.PKCS7;
        ICryptoTransform cTransform = tripleDES.CreateEncryptor();
        byte[] resultArray = cTransform.TransformFinalBlock(inputArray, 0, inputArray.Length);
        tripleDES.Clear();
        return Convert.ToBase64String(resultArray, 0, resultArray.Length);
    }

    public static string Decrypt(string input, string key)
    {
        byte[] inputArray = Convert.FromBase64String(input);
        TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
        tripleDES.Key = UTF8Encoding.UTF8.GetBytes(key);
        tripleDES.Mode = CipherMode.ECB;
        tripleDES.Padding = PaddingMode.PKCS7;
        ICryptoTransform cTransform = tripleDES.CreateDecryptor();
        byte[] resultArray = cTransform.TransformFinalBlock(inputArray, 0, inputArray.Length);
        tripleDES.Clear();
        return UTF8Encoding.UTF8.GetString(resultArray);
    }

}

【讨论】:

  • 我有类似的东西,但是在以下行中的解密方法失败:Convert.FromBase64String(input);因为加密的文本不是 Base64String
猜你喜欢
  • 2020-01-03
  • 2015-09-23
  • 2018-05-18
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 2021-06-06
相关资源
最近更新 更多