将 JavaScript 哈希函数移植到 Python [已关闭]

问题描述 投票:0回答:1

我想将下面的函数转换为 Python,但我猜 hashlib/Crypto 库的工作方式与 crypto-js 不同:

class captha {
    constructor() {
        this.RECAPTCHA_ENCRYPT_SECRET = CryptoJS.MD5("token"); // Chave secreta como WordArray
        console.log(this.RECAPTCHA_ENCRYPT_SECRET)
    }
    encryptToken(z) {
        return CryptoJS.TripleDES.encrypt(z, this.RECAPTCHA_ENCRYPT_SECRET, {
            mode: CryptoJS.mode.ECB
        }).toString();
    }

}

我试过了

from Crypto.Hash import MD5

hash_obj = MD5.new(data=b"token")
hash_bytes = hash_obj.digest()


words = [int.from_bytes(hash_bytes[i:i+4], byteorder='little', signed=True) for i in range(0, len(hash_bytes), 4)]
sigBytes = len(hash_bytes)


print("Words:", words)
print("SigBytes:", sigBytes)

但是没有成功。

javascript python hash md5 porting
1个回答
0
投票

您的 JS 代码不遵守 JavaScript 的命名约定。这是我重组代码的方法。它可以更轻松地将其与下面移植的 Python 逻辑进行比较。

class Captcha {
  constructor() {
    this.RECAPTCHA_ENCRYPT_SECRET = CryptoJS.MD5("token")
    //console.log(this.RECAPTCHA_ENCRYPT_SECRET)
  }
  encryptToken(z) {
    return CryptoJS.TripleDES.encrypt(z, this.RECAPTCHA_ENCRYPT_SECRET, {
      mode: CryptoJS.mode.ECB
    }).toString()
  }
}

// Main
const token = "foo-bar-baz"
const captcha = new Captcha()
encryptedToken = captcha.encryptToken(token)
console.log(encryptedToken) // HxlKOMQzO4m+JjbWL6/AcA==
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.2.0/crypto-js.min.js"></script>

由于您在 JS 中使用

CryptoJS.TripleDES
,因此需要使用
DES3
(
Crypto.Cipher
) 包中的
cryptojs
类。

这是上述加密方法的等效 Python 端口。

import base64

from Crypto.Cipher import DES3
from Crypto.Hash import MD5
from Crypto.Util.Padding import pad

class Captcha:
    def __init__(self):
        self.RECAPTCHA_ENCRYPT_SECRET = MD5.new(b"token").digest()

    def encrypt_token(self, z):
        cipher = DES3.new(self.RECAPTCHA_ENCRYPT_SECRET, DES3.MODE_ECB)
        padded_z = pad(z.encode(), DES3.block_size)
        encrypted_token = cipher.encrypt(padded_z)
        return base64.b64encode(encrypted_token).decode()

if __name__ == "__main__":
    captcha = Captcha()
    token = "foo-bar-baz"
    encrypted_token = captcha.encrypt_token(token)
    print(encrypted_token)  # HxlKOMQzO4m+JjbWL6/AcA==
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.