以下の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ハッシュです。上記の方法は、正しい文字列に到達するためにデコードがどのように機能するかを理解する例です。
エンコード
/ KUGOuoESMWYuDb + BTMK1LaGe7k =
デコード
FCA5063AEA0448C598B836FE05330AD4B6867BB9
また
0xFCA5063AEA0448C598B836FE05330AD4B6867BB9
Porgesのおかげで正しいSHA1値を反映するように更新され、Dean'codeka'Hardinによって発見されたhexバグが修正されました。
実装されたソリューション
これが私が今持っている実装です、それは2つの方法に蒸留されたポルゲスからのものです。
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")));
}