Это base40 и если да, то как я могу декодировать его в C #? - PullRequest
1 голос
/ 26 июня 2010

У меня есть несколько закодированных строк, и мне нужно их декодировать, я думаю, они могут быть в кодировке base40. Мне действительно нужно декодировать, но было бы неплохо сделать кодирование также и на C #. Кстати, я перепробовал все стандартные типы декодирования, прежде чем пришел к выводу, что он выглядит как base40.

Я не смог найти ничего о кодировке / декодировании base40, я нашел много информации о кодировании для похожих вещей, таких как base32 и, конечно, base64, поэтому я думаю, что можно сделать base40.

Вот пример кодированной строки и правильного декодированного значения. Я могу предоставить несколько других примеров, если это необходимо. Все строки, которые я хочу декодировать, являются закодированными хешами SHA1.

ЗАКОДИРОВАНО

/ KUGOuoESMWYuDb + BTMK1LaGe7k =

ДЕКОДИРОВАН

0xFCA5063AEA0448C598B836FE05330AD4B6867BB9

UPDATE: Оказывается, это двоичная версия строки SHA1, которая затем кодируется в base64, поэтому у меня возникли проблемы с ее декодированием. Я могу отдать должное Игнасио Васкесу-Абрамсу, потому что он показал некоторые результаты, показывающие base64, но не объяснил свой ответ и не привел пример C # в соответствии с просьбой. Поэтому я пошел и стал более глубоко разбираться в том, что делает его код на каком бы то ни было языке, и я придумал ответ, который я опубликовал, на примере C #, как это сделать.

Ответы [ 3 ]

3 голосов
/ 27 июня 2010

Игнасио прав; то есть base-64:

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

Дает:

fca5063aea0448c598b836fe05330ad4b6867bb9
3 голосов
/ 26 июня 2010

То, что у вас есть, это обычная Base64, а не Base40.

>>> '/KUGOuoESMWYuDb+BTMK1LaGe7k='.decode('base64')
'\xfc\xa5\x06:\xea\x04H\xc5\x98\xb86\xfe\x053\n\xd4\xb6\x86{\xb9'
1 голос
/ 27 июня 2010

Хорошо, это 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());
...