2010-06-26 26 views
1

我有幾個編碼的字符串,我需要解碼它們,我的猜測是它們可能是base40編碼。我真的需要解碼,但是在C#中編碼也是很好的。順便說一句,我已經嘗試了所有標準類型的解碼,然後才得出結論,它似乎是基數40。這是base40,如果是的話,我怎麼能在C#中解碼它?

我找不到任何關於base40編碼/解碼的東西,我發現了很多關於base32和base64等類似東西的編碼信息,所以我認爲應該可以做一個base40。

下面是編碼字符串和正確解碼值的示例。如果需要,我可以提供其他幾個例子。我想要解碼的所有字符串都是經過編碼的SHA1散列值。

編碼

/KUGOuoESMWYuDb + BTMK1LaGe7k =

DECODED

0xFCA5063AEA0448C598B836FE05330AD4B6867BB9

UPDATE: 原來是SHA1字符串,然後二進制版本編碼爲base64這就是爲什麼我無法解碼它。我可以稱讚Ignacio Vazquez-Abrams,因爲他顯示了一些顯示base64的輸出,但沒有解釋他的答案,也沒有按要求提供C#示例。所以我深入瞭解了他的代碼在做什麼語言的過程中所做的更深入的事情,並提出了我用C#示例發佈的答案。

回答

3

Ignacio是正確的;這是基於64:

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

給出:

fca5063aea0448c598b836fe05330ad4b6867bb9 
+0

看起來很親切我的回答我發佈在你的。 :)我也作爲Ignocio在我的評論中稱讚是正確的,但不提供C#答案。我想我會在你發佈除我之外的第一個C#答案之後給你的支票,那是因爲時機。 :) 多謝你們! – 2010-06-26 20:12:54

3

你有什麼是普通的Base64,而不是Base40。

>>> '/KUGOuoESMWYuDb+BTMK1LaGe7k='.decode('base64') 
'\xfc\xa5\x06:\xea\x04H\xc5\x98\xb86\xfe\x053\n\xd4\xb6\x86{\xb9' 
+0

怎麼會這樣?當我將該字符串解碼爲base64時,我得到垃圾「 : HŘ 6 3Զ { 」當我對已知結果進行編碼時,得到「MHhGQ0E1MDYzQUVBMDQ0OEM1OThCODM2RkUwNTMzMEFENEI2ODY3QkI5」。 Base64使得結果比原始結果更大,這比原來的要小。我不確定你的示例代碼是什麼語言,它不是所要求的C#。 – 2010-06-26 19:54:03

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()); 
相關問題