【问题标题】:Converting Java to Python将 Java 转换为 Python
【发布时间】:2018-06-11 07:48:27
【问题描述】:

我想知道你们是否可以帮我将一些 java 代码转换为 python。基本上我试图获得与java代码执行相同的哈希输出。目前我所得到的(在 python 中)是使用 hashlib 模块将一些字符串转换为 sha256。

我试过谷歌搜索,但什么也没找到,朋友们帮不上忙,所以这是我最后的选择。这是我从 python 和 java 获得的哈希输出。显然 python 是不正确的哈希,而 java 代码是正确的哈希。

Java 代码输出哈希(正确):

947e238ef26e56d3de2fe2480268c23297d91efe6355b3e5fac0dcf63

Python 代码输出哈希(不正确):

88c5f638b023a5740676960747833fc4eacc20697c92e1b46b0384ebf

java 代码散列一个字符串,该字符串被拆分为变量,我卡在 for 循环中,我无法将其转换为 python。请注意我是一个菜鸟,不是很有经验,谢谢:P。

Java 代码:

    String pass = "6b508/^!zVl?947e238ef26e56d3de2fe2480268c23297d91efe6355b3e5fac0dcf63";
    String secretKey = "Wr79mk1PXFac!#%";
    String loginKey = pass.substring(0, 5);
    String randomKey = pass.substring(5, 13);
    String originalHash = pass.substring(13);

    try {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        md.update((loginKey + randomKey + secretKey).getBytes(StandardCharsets.UTF_8));

        //obtain hash
        byte[] hash = md.digest();
        StringBuilder hexString = new StringBuilder();
        for (byte aHash : hash) {
            String hex = Integer.toHexString(0xff & aHash);
            if (hex.length() == 1) hexString.append('0');
            hexString.append(hex);
        }
        String newHash = hexString.toString().substring(0, 56);
        if (newHash.equals(originalHash)) {
            //hash is right
            return true;
        }

Python 代码(我尝试转换):

key = "6b508"
salt = "Wr79mk1PXFac!#%"
rand = "/^!zVl?"
hash = hashlib.sha256(key+rand+salt).hexdigest()
raw_input(hash[0:57])

任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 这可能与字符宽度有关,Java 使用 16 位字符,而 python 使用 8 位字符。将字符串编码为 un​​icode 或 UTF-8 字符串,它应该工作。
  • 仔细查看您正在散列的字符串以及它是如何形成的。 Java 和 Python 版本对我来说看起来不同。 (如果你散列不同的输入,那么......自然......输出会不同。)
  • @vandench - 我怀疑不是。在 Java 案例中,他在散列之前转换为字节(UTF-8)。字符(在本例中)看起来都是 ASCII。
  • 如果您从 java 代码中打印出 loginKeyrandomKeyoriginalHash,您会注意到您在 python 代码中的 rand 值是错误的(应该是 @987654329 @) 并且具有正确输入值的 java 以及 python 代码作为哈希值给出“47e238ef26e56d3de2fe2480268c23297d91efe6355b3e5fac0dcf63”
  • @ThomasKläger 你是对的,需要解决这个问题

标签: java python hash hashlib


【解决方案1】:

错误在 Java 代码中。 pass.substring(5, 13) 返回 "/^!zVl?9" 但不希望将“9”作为 randomKey 的一部分。

请改用String randomKey = pass.substring(5, 12)String originalHash = pass.substring(12)

【讨论】:

    猜你喜欢
    • 2014-05-14
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    相关资源
    最近更新 更多