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

jav*_*iry 6 c# java base64 sha1 bytearray

我在C#JAVA之间进行通讯时遇到问题。我必须使用JAVA中的SHA1对程序中的值进行哈希处理。问题是,在计算哈希JAVA结果(这样做的C# ,但:) 式JAVA签署,而它的无符号C# 。因此,我必须摆脱JAVA中的多余位(无法触摸C#端)。这是我在做什么:byte[]byte

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;
}
Run Code Online (Sandbox Code Playgroud)

它给了我正确的数组。但是,问题是base64编码result。我该如何做而又不会陷入signed byte陷阱?我的意思是如何完成此代码段:

var resultArray = Hash(someSource, someSalt);
var resultBase64EncodedString = HOW_TO_BASE64_ENCODE_HERE(resultArray);
Run Code Online (Sandbox Code Playgroud)

提前致谢。

小智 0

Base64 编码你的 resultBytes 数组

String base64EncodedString = DatatypeConverter.printBase64Binary(resultBytes);
Run Code Online (Sandbox Code Playgroud)

应该为您提供与在 C# 中获得的相同的 base64 编码字符串

SHA1 sha1 = SHA1.Create();
byte[] currentHash = new byte[0];
currentHash = sha1.ComputeHash(sourceBytes);
String base64EncodedString = Convert.ToBase64String(currentHash);
Run Code Online (Sandbox Code Playgroud)