Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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
SHA-1的实现产生的哈希值与“java.security”实现不同_Java_Algorithm_Hash_Sha - Fatal编程技术网

SHA-1的实现产生的哈希值与“java.security”实现不同

SHA-1的实现产生的哈希值与“java.security”实现不同,java,algorithm,hash,sha,Java,Algorithm,Hash,Sha,我试图在Java11中实现SHA-1算法,在测试哈希算法时,我得到的哈希值与使用SHA-1的Java.security实现进行哈希时得到的哈希值不同 可以找到我试图遵循的伪代码 公共静态字节[]哈希字节[]消息{ int h0=0x67452301; int h1=0xEFCDAB89; int h2=0x98BADCFE; int h3=0x10325476; int h4=0xC3D2E1F0; ByteArrayOutputStream out=新建ByteArrayOutputStrea

我试图在Java11中实现SHA-1算法,在测试哈希算法时,我得到的哈希值与使用SHA-1的Java.security实现进行哈希时得到的哈希值不同

可以找到我试图遵循的伪代码

公共静态字节[]哈希字节[]消息{ int h0=0x67452301; int h1=0xEFCDAB89; int h2=0x98BADCFE; int h3=0x10325476; int h4=0xC3D2E1F0; ByteArrayOutputStream out=新建ByteArrayOutputStream; out.writebytes消息; out.write0x00000080; 而out.size%64!=56 out.write0x00000000; out.writeBytesByteBuffer.allocate8.putLongmessage.length.array; 字节[]数据=out.toByteArray; 对于int j=0;j32-c; } 为了验证这一点,我尝试对n个字节的随机数组进行散列,并将散列与通过

MessageDigest.getInstanceSHA-1.digestmessage 我得到不同的哈希值。
在我上面的实现中是否有任何错误?错误可能来自其他地方吗?

实现中存在两个问题。首先,我以字节而不是位来编写初始消息的大小。其次,leftrotate方法使用了算术右移,而它本应该使用逻辑右移。

我得到了不同的哈希值。在我上面的实现中是否有任何错误?如果得到不同的散列,那么实现中一定有错误。或者,在你比较散列的方式中。@ElliottFrisch这不是我比较散列的方式。那么你知道这种区别是从哪里来的吗?我遵循伪代码,我假设Java的实现也遵循伪代码。那为什么错在这里呢?嗯。。。您不会得到相同的结果,因为除了使用消息的长度外,您完全忽略了消息输入。此外,ByteArrayOutputStream没有一个名为writeBytes的方法,即使其他所有内容都正确,您也没有显示leftrotate的代码,因此我们永远无法回答您的问题。请在提问时更加小心。@JamesKPolk抱歉,复制和粘贴以前的版本时出错,我没有解决此问题。编辑。问题依然存在。考虑到writeBytes,确实如此。看见使用这个而不是write允许不必处理无论如何都不会抛出的IOException。您的代码仍然无法编译。试着编译你在这里发布的内容。