Java迭代SHA-1哈希与Python

比约恩

我对Java中的哈希算法有一个特定的问题。我有2个客户端,一个正在运行python,另一个正在运行Java(我知道,我可以仅使用python来解决所有问题,但现在我几乎需要使用java)。

客户端需要以相同的方式比较插入的密码(即:如果PIN在Java客户端上生成哈希,则python客户端需要生成相同的哈希。

我在这里阅读:迭代哈希在Python和Java中返回不同的值

并在这里研究了官方文档:https : //docs.oracle.com/javase/7/docs/api/java/security/MessageDigest.html

并发现python允许无缝的迭代编码,而java则不允许。我尝试通过以下方式(.java代码)使用.clone()方法解决该问题:

        // creation of SHA-1 instance:
        MessageDigest message = MessageDigest.getInstance("SHA-1");
        // construction of the string to hash:
        String secretMessage = "0" + myPassWord + mySalt;
        // updating the instance:
        message.update(secretMessage.getBytes());
        // cloning the instance:
        MessageDigest messageClone = (MessageDigest) message.clone();
        // digesting the clone: the result is of type byte[]:
        byteResult = messageClone.digest();
        // construction of the previousHash: this will be used in the 
        // next run of SHA-1 hashing. Python runs everything in lowercase.
        // the hash is rendered as HEX characters String:
        prevHash = (DatatypeConverter.printHexBinary(byteResult)).toLowerCase();
        secretMessage = prevHash + "1" + myPassWord + mySalt;
        message.update(secretMessage.getBytes());
        // compute the final digest:
        byteResult = message.digest();
        // print it:
        System.out.println(DatatypeConverter.printHexBinary(byteResult));

现在,通过在第一次迭代(索引“ 0”)上执行System.out.println,哈希值重合。

不幸的是,后续索引出现了问题,出于对我的爱,我无法理解它的含义。我怀疑这与python如何转换字符串并将其插入secretMessage变量有关。

供您参考,这是python中的代码:

digest2 = ""
for i in range (0, 2):
    digest2 = sha1(digest2 + str(i) + password_to_hash + salt).hexdigest()
    print digest2
约翰16384

问题在于,在Java实现中,您在MessageDigest不重置的情况下首先提供了迭代字符串,然后提供了第二个迭代字符串MessageDigest,因此实际上它是在创建一个Stringlike之类的哈希值

"0" + pw + salt + sha-of-data-so-far + "1" + pw + salt

但是python实现会为第二次迭代启动新的哈希,并创建两个哈希:

"0" + pw + salt

然后:

sha-of-iteration-1 + "1" + pw + salt

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章