<p>Erwin Bolwidt在<a href="https://stackoverflow.com/questions/53565583/sha1-java-vs-python-are-not-the-same#comment93997440_53565583">comment</a>中回答了这个问题:</p>
<blockquote>
<p><strong>Remove the <code>print</code> statement.</strong> Calling <code>digest</code> is destructive and you call it twice - the value that you return from the method is incorrect</p>
</blockquote>
<p>除此之外:</p>
<ul>
<li><p>不需要对新的<a href="https://docs.oracle.com/javase/8/docs/api/java/security/MessageDigest.html" rel="nofollow noreferrer">^{<cd2>}</a>调用<a href="https://docs.oracle.com/javase/8/docs/api/java/security/MessageDigest.html#reset " rel="nofollow noreferrer">^{<cd1>}</a></p></li>
<li><p>调用<a href="https://docs.oracle.com/javase/8/docs/api/java/security/MessageDigest.html#update-byte:A-" rel="nofollow noreferrer">^{<cd3>}</a>而不是<a href="https://docs.oracle.com/javase/8/docs/api/java/security/MessageDigest.html#update-byte:A-int-int-" rel="nofollow noreferrer">^{<cd4>}</a></p></li>
<li><p>调用<a href="https://docs.oracle.com/javase/8/docs/api/java/security/MessageDigest.html#digest-byte:A-" rel="nofollow noreferrer">^{<cd5>}</a>而不是<a href="https://docs.oracle.com/javase/8/docs/api/java/security/MessageDigest.html#update-byte:A-" rel="nofollow noreferrer">^{<cd3>}</a>+<a href="https://docs.oracle.com/javase/8/docs/api/java/security/MessageDigest.html#digest " rel="nofollow noreferrer">^{<cd7>}</a></p></li>
</ul>
<p>以上所有这些都意味着你的代码应该是:</p>
<pre><code>private static byte[] getSHA1(byte[] input) throws NoSuchAlgorithmException {
return MessageDigest.getInstance("SHA-1").digest(input);
}
</code></pre>
<p><em>测试</em></p>
^{pr2}$
<p><em>输出</em></p>
<pre class="lang-none prettyprint-override"><code>[-96, -1, 78, 94, -67, -96, -113, 12, -31, 93, -10, -55, -5, 72, -2, -57, 52, -84, -117, 40]
</code></pre>
<p>它与<a href="https://stackoverflow.com/questions/53565583/sha1-java-vs-python-are-not-the-same#comment93997303_53565583">Python output</a>相同,但打印为有符号与无符号字节:</p>
<pre class="lang-none prettyprint-override"><code>[160, 255, 78, 94, 189, 160, 143, 12, 225, 93, 246, 201, 251, 72, 254, 199, 52, 172, 139, 40]
</code></pre>