Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取Java和C之间的匹配校验和#_Java_C#_Checksum_Sha256 - Fatal编程技术网

获取Java和C之间的匹配校验和#

获取Java和C之间的匹配校验和#,java,c#,checksum,sha256,Java,C#,Checksum,Sha256,我正在将一个方法从C#应用程序移植到Java,该方法为文件(base64编码)创建校验和。在C#中,这是一种方法: public static string GetChecksum(byte[] bytes) { using (var stream = new MemoryStream(bytes)) { var sha = new SHA256Managed(); byte[] checksum = sha.ComputeHash(stream);

我正在将一个方法从C#应用程序移植到Java,该方法为文件(base64编码)创建校验和。在C#中,这是一种方法:

public static string GetChecksum(byte[] bytes)
{
    using (var stream = new MemoryStream(bytes))
    {
      var sha = new SHA256Managed();
      byte[] checksum = sha.ComputeHash(stream);
      return BitConverter.ToString(checksum).Replace("-", String.Empty);
    }
}
以下是我目前在Java中所做的,但它肯定与从C#返回的值不匹配:

我尝试过在
getBytes()
方法中不使用字符集,我尝试过使用字符集
US-ASCII


这东西不在我的驾驶室里,我不知道该怎么做。非常感谢您的帮助。

您可以使用Guava库来计算哈希值

String sha256hex = Hashing.sha256()
  .hashString(originalString, StandardCharsets.UTF_8)
  .toString();
String sha256hex = DigestUtils.sha256Hex(originalString);
ApacheCommons编解码器还具有用于计算哈希的库

String sha256hex = Hashing.sha256()
  .hashString(originalString, StandardCharsets.UTF_8)
  .toString();
String sha256hex = DigestUtils.sha256Hex(originalString);

在Java中,要解码Base64字符串,您有以下内容(自Java8以来):


from:

string.getBytes对您没有帮助。它将获得字符串中每个单个字符的字节值(使用所选的字符编码,在您的例子中是UTF-8)。它不会解码Base64字符串。我不了解Java,但浏览JDK文档,查找一些执行base64解码的类/方法…@elgonzo。好的,让我试试使用base64解码器。我几分钟后再报告。谢谢。@elgonzo。。。成功了。谢谢所以,你首先用解决问题所需的信息发表评论,然后其他人很快就发表了评论。有点尴尬我自己都没意识到,但是。。。你想让你的评论成为一个答案,我会接受的?既然已经有了关于Java中Base64解码的答案,我觉得我不需要再添加一个重复的答案;-)如果其中一个答案解决了您的问题,请随意接受。我不介意得不到任何声誉积分…;-)@elgonzo,酷。尽管如此,您作为第一个采取行动的人将永远被铭记在评论中:)对于他们的声誉点。
newstring(decodedBytes)
在解码字节是真正的二进制而不是文本数据时是不合适的(如果合适的话,最好明确指定一个字符集)。