代码之家  ›  专栏  ›  技术社区  ›  Rodney S. Foley

这是BASE40,如果是这样,我如何解码C?

  •  1
  • Rodney S. Foley  · 技术社区  · 15 年前

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

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

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

    编码的

    /KuuouoESMWYUDB+BTMK1LAGE7K=

    译码

    0XFCA5063EA0448C598B836FE05330AD4B6867BB9

    更新: 原来是sha1字符串的二进制版本,然后被编码为base64,这就是为什么我在解码它时遇到困难的原因。我可以归功于伊格纳西奥·瓦兹奎兹·艾布拉姆斯,因为他展示了一些显示base64的输出,但没有解释他的答案,也没有按要求提供C示例。因此,我深入研究了他的代码是用什么语言做的,我想出了一个用C示例发布的答案。

    3 回复  |  直到 15 年前
        1
  •  3
  •   Marc Gravell    15 年前

    Ignacio is right; that is base-64:

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

    给予:

    fca5063aea0448c598b836fe05330ad4b6867bb9
    
        2
  •  3
  •   Ignacio Vazquez-Abrams    15 年前

    你所拥有的是跑步机Base64,而不是BASE40。

    >>> '/KUGOuoESMWYuDb+BTMK1LaGe7k='.decode('base64')
    '\xfc\xa5\x06:\xea\x04H\xc5\x98\xb86\xfe\x053\n\xd4\xb6\x86{\xb9'
    
        3
  •  1
  •   Rodney S. Foley    15 年前

    好吧,它是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());
    
    推荐文章