1

我有几个编码字符串,我需要对它们进行解码,我猜它们可能是 base40 编码。我真的需要解码,但最好在 C# 中进行编码。顺便说一句,在得出它似乎是 base40 的结论之前,我已经尝试了所有标准类型的解码。

我找不到任何关于 base40 编码/解码的信息,我发现了很多关于类似东西的编码信息,比如 base32,当然还有 base64,所以我认为应该可以做一个 base40。

这是编码字符串和正确解码值的示例。如果需要,我可以提供其他几个示例。我要解码的所有字符串都是编码的 SHA1 哈希。

编码

/KUGOuoESMWYuDb+BTMK1LaGe7k=

解码

0xFCA5063AEA0448C598B836FE05330AD4B6867BB9

更新: 原来是 SHA1 字符串的二进制版本,然后编码为 base64,这就是我无法解码它的原因。我可以归功于 Ignacio Vazquez-Abrams,因为他展示了一些显示 base64 的输出,但没有解释他的答案,也没有按要求提供 C# 示例。所以我去更深入地研究了他的代码在什么语言中所做的事情,我想出了我发布的答案,其中包含一个 C# 示例如何做到这一点。

4

3 回答 3

3

你所拥有的是普通的 Base64,而不是 Base40。

>>> '/KUGOuoESMWYuDb+BTMK1LaGe7k='.decode('base64')
'\xfc\xa5\x06:\xea\x04H\xc5\x98\xb86\xfe\x053\n\xd4\xb6\x86{\xb9'
于 2010-06-26T19:45:27.750 回答
3

伊格纳西奥是对的;那是base-64:

byte[] raw = Convert.FromBase64String("/KUGOuoESMWYuDb+BTMK1LaGe7k=");
foreach(byte b in raw) Console.Write(b.ToString("x2"));

给出:

fca5063aea0448c598b836fe05330ad4b6867bb9
于 2010-06-26T20:07:38.017 回答
1

好的,它是 Base64 但它较小的原因是因为它是 sha1 的二进制版本,所以提供的唯一答案并没有真正提供我如何做到这一点,因为我要求 C# 代码,这是一种方法在 C# 中执行此操作:

string encoded = "/KUGOuoESMWYuDb+BTMK1LaGe7k=";
StringBuilder builder = new StringBuilder();
foreach (var b in Convert.FromBase64String(encoded))
    builder.Append(string.Format("{0:X}", b));
Console.Out.WriteLine(builder.ToString());
于 2010-06-26T20:05:55.710 回答