Я хотел бы знать, как отменить процесс описанного ниже DecodeBinaryBase64, чтобы у меня был соответствующий метод Encode.Короче говоря, код C #, который, если дан результат этого метода, будет возвращать ту же строку, что и входные данные.
private static string DecodeBinaryBase64(string stringToDecode)
{
StringBuilder builder = new StringBuilder();
foreach (var b in Convert.FromBase64String(stringToDecode))
builder.Append(string.Format("{0:X2}", b));
return builder.ToString();
}
Вот пример закодированной строки и ее декодированной копии.Результатом является хэш SHA1 для файла.Приведенный выше метод является примером понимания того, как работает декодирование для получения правильной строки.
ENCODED
/ KUGOuoESMWYuDb + BTMK1LaGe7k =
DECODED
FCA5063AEA0448C598B836FE05330AD4B6867BB9
или
0xFCA5063AEA0448C598B836FE05330AD4B6867BB9
* исправлено из-за исправления для исправления ** * * * * * * * * *Дин 'кодека' Хардин обнаружил ошибку.
Внедренное решение
Вот реализация, которая у меня есть сейчас, это из сообщения Поргеса, перебранного до двухметоды.
private static string EncodeFileDigestBase64(string digest)
{
byte[] result = new byte[digest.Length / 2];
for (int i = 0; i < digest.Length; i += 2)
result[i / 2] = byte.Parse(digest.Substring(i, 2), System.Globalization.NumberStyles.HexNumber);
if (result.Length != 20)
throw new ArgumentException("Not a valid SHA1 filedigest.");
return Convert.ToBase64String(result);
}
private static string DecodeFileDigestBase64(string encodedDigest)
{
byte[] base64bytes = Convert.FromBase64String(encodedDigest);
return string.Join(string.Empty, base64bytes.Select(x => x.ToString("X2")));
}