0

取引先から、HMAC SHA1 ハッシュを小文字のヘキシットとして送信するように依頼されました。私が見つけることができる唯一の参考文献は、PHP に関するものです。.NET と Java でハッシュを行うことはできますが、「小文字の hexits」を出力するにはどうすればよいですか? 小文字の hexits は Base64 と同等ではないようです。

4

3 に答える 3

2

ああ!私はシンプルさが大好きです。これが解決策です。

Public Shared Function Encrypt(ByVal plainText As String, ByVal preSharedKey As String) As String
    Dim preSharedKeyBytes() As Byte = Encoding.UTF8.GetBytes(preSharedKey)
    Dim plainTextBytes As Byte() = Encoding.UTF8.GetBytes(plainText)
    Dim hmac = New HMACSHA1(preSharedKeyBytes)
    Dim cipherTextBytes As Byte() = hmac.ComputeHash(plainTextBytes)

    Dim strTemp As New StringBuilder(cipherTextBytes.Length * 2)
    For Each b As Byte In cipherTextBytes
        strTemp.Append(Conversion.Hex(b).PadLeft(2, "0"c).ToLower)
    Next
    Dim cipherText As String = strTemp.ToString
    Return cipherText
End Function

これは、raw_output パラメーターに FALSE を指定した PHP の hash_hmac 関数と互換性があります。

于 2013-11-04T01:13:00.600 に答える
1

小文字の 16 進数 (hexits) には、次を使用します。

public static String toHex(byte[] bytes) {
    BigInteger bi = new BigInteger(1, bytes);
    return String.format("%0" + (bytes.length << 1) + "x", bi);
}

関連する質問から: Java では、先行ゼロを保持しながらバイト配列を 16 進数の文字列に変換するにはどうすればよいですか?

于 2013-11-01T08:07:09.460 に答える
0

sedge のソリューションの C# 翻訳は次のとおりです。

private static String toHex(byte[] cipherTextBytes)
{
    var strTemp = new StringBuilder(cipherTextBytes.Length * 2);

    foreach(Byte b in cipherTextBytes) 
    {
        strTemp.Append(Microsoft.VisualBasic.Conversion.Hex(b).PadLeft(2, '0').ToLower());
    }

    String cipherText = strTemp.ToString();
    return cipherText;
}
于 2015-11-29T15:18:43.097 に答える