小写的六角形。 .NET和Java等价物

A trading partner has asked me to send an HMAC SHA1 hash as lowercase heaxits. The only reference I can find to them is in relation to PHP. I can do the hashing in .NET and Java but how do I output "lowercase hexits" with them? Lowercase hexits doesn't appear to be equivalent to Base64.

For lowercase hex digits (hexits) use:

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

From related question: In Java, how do I convert a byte array to a string of hex digits while keeping leading zeros?

Ah! I love simplicity. Here's the solution.

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

This is compatible with the PHP hash_hmac function with FALSE in the raw_output parameter.

Here's a C# translation of sedge's solution:

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;
}