我想将下面的函数转换为 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)
但是没有成功。
您的 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==