【问题标题】:Encoding strings to and from base-64编码字符串到和从 base-64
【发布时间】:2012-04-10 07:54:58
【问题描述】:

我正在尝试从 base-64 字符串来回编码一些字符串,但我很难得到正确的结果。

string text = base64string.... //Here I have a base-64 string.
byte[] encodedByte = System.Text.ASCIIEncoding.ASCII.GetBytes(text);
string base64Encoded = Convert.ToBase64String(encodedByte);

if (text == base64Encoded) //If the new encoded string is equal to its original value
    return base64Encoded;

我已经尝试了我的方法来做到这一点,但我似乎没有得到正确的结果。我用System.Text.Encoding.UnicodeSystem.Text.Encoding.UTF8 都试过了

可能是什么问题?有人有合适的解决方案吗?

【问题讨论】:

  • 好的,阅读您的代码,您正在获取一个 base64 字符串,然后将其编码为 base64,然后将编码后的字符串与原始字符串进行比较?
  • 为什么要从编码形式开始?您可以尝试先从纯文本进行编码,然后再解码。还是您尝试自己实现编码/解码算法?
  • @Brian - 是的,这就是我正在做的事情。
  • @Erik,记住,text 不会与base64encoded 匹配,因为base64encodedtext 的“乱码”内容,:D
  • 为什么投反对票。 Erik 我想你现在看到了问题所在。我认为您想要做的是将原始未编码的字符串传递给 Convert.ToBase64String(encodedByte);然后将结果与您的原始编码字符串进行比较以查看它们是否匹配。

标签: c# string base64


【解决方案1】:

将 Base64 中所需的任何内容转换为 Byte 数组,然后使用 FromBase64String 和 ToBase64String 与 Base64 相互转换:

Byte[] buffer = Convert.FromBase64String(myBase64String1);
myBase64String2 = Convert.ToBase64String(buffer);

myBase64String1 将等于 myBase64String2。您将需要使用其他方法将数据类型转换为 Byte 数组,反之则返回数据类型。我已经使用它来将类的内容转换为字节数组,然后转换为 Base64 字符串并将字符串写入文件系统。后来我通过逆向过程将它读回到一个类实例中。

【讨论】:

    【解决方案2】:

    您的编码代码布局正确。要确认base64编码的字符串是否正确,可以尝试解码,并将解码后的内容与原始内容进行比较:

    var decodedBytes = Convert.FromBase64String(base64encoded);
    var compareText = System.Text.Encoding.ASCII.GetString(decodedText);
    
    if (text == compareText)
    {
        // carry on...
        return base64encoded;
    }
    

    【讨论】:

      【解决方案3】:

      如果text 是一个base-64 字符串,那么你是在倒退:

      byte[] raw = Convert.FromBase64String(text); // unpack the base-64 to a blob
      string s = Encoding.UTF8.GetString(raw); // assume the blob is UTF-8, and 
                                               // decode to a string
      

      这将使您获得string。但请注意,这种情况仅适用于以 ascii 格式表示 unicode 文本。如果原始内容是string,通常你不会对其进行base-64编码。

      【讨论】:

        【解决方案4】:
        string text = base64string.... //Here I have a base-64 string.
        byte[] encodedByte = System.Text.ASCIIEncoding.ASCII.GetBytes(text);
        string base64Encoded = Convert.ToBase64String(encodedByte);
        

        您正在对字符串进行双重编码。您从一个 base64 字符串开始,获取字节,然后再次对其进行编码。如果要比较,则需要从原始字符串开始。

        【讨论】:

        • S - 我知道。我想要的是将base-64字符串编码为另一种格式,然后再次编码回base-64,只是为了看看编码的结果是否没有丢失任何数据。我知道这是一个愚蠢的操作,但我还是想做。
        • @ErikLarsson:base64 已经保证你不会丢失数据,所以我不明白这一点。但是,如果您知道我在告诉您什么……那么问题是什么?显然,当您一次又一次地对字符串进行编码时,您将不会得到相同的结果。从原始字符串开始,对其进行编码,如果您真的想检查,请对其进行解码。
        猜你喜欢
        • 2023-03-26
        • 2017-06-17
        • 1970-01-01
        • 1970-01-01
        • 2018-03-19
        • 1970-01-01
        • 2015-08-09
        • 1970-01-01
        • 2011-08-25
        相关资源
        最近更新 更多