Python AES.MODE_CTR не расшифровывается должным образом - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь переписать node.js функцию декодирования в python

это функция, которую я пытаюсь переписать

module.exports.decrypt = function (data, key, iv, hmacKey) {

iv = iv.slice(0, 16)

var decipherer = crypto.createDecipheriv('aes-128-ctr', key, iv)

var hmac

if (hmacKey) {
    hmac = crypto.createHmac('sha1', hmacKey).update(data).digest()
}

return {
    data: decipherer.update(data),
    hmac: hmac
}
}

параметр key генерируется функцией crypto.pbkdf2Sync стандартной библиотеки узла.

В Python я реализовал

from Crypto.Cipher import AES
from Crypto.Util import Counter

def decrypt(data, key, iv, hmac=None):
    iv = iv[:16]
    ctr = Counter.new(128)
    cipher = AES.new(key, mode=AES.MODE_CTR, IV=iv, counter=ctr)
    return cipher.decrypt(data)

Я предоставил функции дешифрования python те же данные, которые получает функция js. поскольку параметры data и key, iv, ожидаемые функцией js, являются двоичными буферами, я скопировал их в код python в виде шестнадцатеричных строк, а затем использовал binascii.unhexlify в коде python перед передачей их в ecrypt функция Python.

поэтому аргументы, которые я предоставляю обеим функциям (hex)

data 972acf88c5d7
key 129b6e542600889a75ec7659d9dc23df
iv 31323331323331323331323331323331323331323331313233313233313233313233

Функция python возвращает бред. кто-нибудь может помочь?

спасибо!

...