Я хочу преобразовать приведенную ниже функцию в Python, но предполагаю, что библиотека hashlib/Crypto работает иначе, чем crypto-js:
class captha {
constructor() {
this.RECAPTCHA_ENCRYPT_SECRET = CryptoJS.MD5("token"); // Chave secreta como WordArray
console.info(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.info(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.info(encryptedToken) // HxlKOMQzO4m+JjbWL6/AcA==
<script src = "https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.2.0/crypto-js.min.js"></script>
Поскольку вы используете CryptoJS.TripleDES
в JS, вам необходимо использовать класс DES3
из пакета Crypto.Cipher
(cryptojs
). Вам также необходимо убедиться, что вы используете режим электронной кодовой книги (ECB).
Вот эквивалентный порт 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==
Каким образом ваш код не работает должным образом? Пожалуйста, подробно опишите конкретную проблему, которую вы наблюдаете, и какие отладки вы сделали. Чтобы узнать больше об этом сообществе и о том, как мы можем вам помочь, начните с тура и прочитайте Как спросить и связанные с ним ресурсы.