SHA-1的实现产生的哈希值与“java.security”实现不同
我试图在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;jSHA-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
在我上面的实现中是否有任何错误?错误可能来自其他地方吗?实现中存在两个问题。首先,我以字节而不是位来编写初始消息的大小。其次,leftrotate方法使用了算术右移,而它本应该使用逻辑右移。我得到了不同的哈希值。在我上面的实现中是否有任何错误?如果得到不同的散列,那么实现中一定有错误。或者,在你比较散列的方式中。@ElliottFrisch这不是我比较散列的方式。那么你知道这种区别是从哪里来的吗?我遵循伪代码,我假设Java的实现也遵循伪代码。那为什么错在这里呢?嗯。。。您不会得到相同的结果,因为除了使用消息的长度外,您完全忽略了消息输入。此外,ByteArrayOutputStream没有一个名为writeBytes的方法,即使其他所有内容都正确,您也没有显示leftrotate的代码,因此我们永远无法回答您的问题。请在提问时更加小心。@JamesKPolk抱歉,复制和粘贴以前的版本时出错,我没有解决此问题。编辑。问题依然存在。考虑到writeBytes,确实如此。看见使用这个而不是write允许不必处理无论如何都不会抛出的IOException。您的代码仍然无法编译。试着编译你在这里发布的内容。