如何base64编码一个无符号字节数组,实际上是一个int []

时间:2015-06-22 11:09:57

标签: java c# base64 bytearray sha1

我在 C# JAVA 之间进行通信时遇到问题。我必须使用 JAVA 中的 SHA1 在我的程序中哈希值。问题是, JAVA 中的计算哈希导致byte[] C#,但是<}> byte类型 JAVA 已签名,而 C#中的未签名。所以我必须摆脱 JAVA 中的额外位( C#方面无法触及)。这就是我正在做的事情:

private static int[] Hash(byte[] plainBytes, byte[] saltBytes)
        throws NoSuchAlgorithmException, UnsupportedEncodingException {
    byte[] sourceBytes = new byte[plainBytes.length + saltBytes.length];
    for (int i = 0, il = plainBytes.length; i < il; i++)
        sourceBytes[i] = plainBytes[i];
    for (int i = 0, il = saltBytes.length, pil = plainBytes.length; i < il; i++)
        sourceBytes[pil + i] = saltBytes[i];
    MessageDigest digest = MessageDigest.getInstance("SHA-1");
    digest.reset();
    byte[] resultBytes = digest.digest(sourceBytes);
    int[] result = new int[resultBytes.length];
    for (int i = 0, il = resultBytes.length; i < il; i++)
        result[i] = ((int) resultBytes[i]) & 255;
    return result;
}

它给了我正确的数组。但是,问题是 base64 编码result。如果不再陷入signed byte陷阱,我怎么能这样做呢?我的意思是如何完成这个片段:

var resultArray = Hash(someSource, someSalt);
var resultBase64EncodedString = HOW_TO_BASE64_ENCODE_HERE(resultArray);

提前致谢。

1 个答案:

答案 0 :(得分:0)

使用

对您的resultBytes数组进行Base64编码
String base64EncodedString = DatatypeConverter.printBase64Binary(resultBytes);

应该为您提供与C#中的

相同的base64编码字符串
SHA1 sha1 = SHA1.Create();
byte[] currentHash = new byte[0];
currentHash = sha1.ComputeHash(sourceBytes);
String base64EncodedString = Convert.ToBase64String(currentHash);
相关问题