Как воспроизвести HMAC на основе SHA256 из R в Python 3 - PullRequest
1 голос
/ 15 октября 2019

Я пытаюсь воспроизвести соленый sha256 вывод из кода R на Python:

library(openssl)
res = sha256("test@gmail.com", key = "111")  
res
# [1] "172f052058445afd9fe3afce05bfec573b5bb4c659bfd4cfc69a59d1597a0031"
import hashlib, binascii
dk = hashlib.pbkdf2_hmac(='sha256', b'test@gmail.com', b'111', 0)
binascii.hexlify(dk)
# b'494c86307ffb9e9e31c4ec8782af6498e91272c011a316c242d9164d765be257'

Как я могу сделать вывод в Python совпадении R?

1 Ответ

2 голосов
/ 15 октября 2019

Я не могу воспроизвести вашу проблему. Следующие ключи соответствуют

В R:

library(openssl)
sha256("test@gmail.com")
#[1] "87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674"

В Python3:

import hashlib
print(hashlib.sha256(b"test@gmail.com").hexdigest())
#87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674

Обновление в ответ на ваш комментарий

TheПервое, на что нужно обратить внимание, это то, что в R sha256 с аргументом, отличным от NULL key, будет вычислен код аутентификации сообщений на основе хеша (HMAC) . Начиная с ?sha256:

Все хеш-функции либо вычисляют хеш-дайджест для «ключа == NULL», либо HMAC (хэш-код аутентификации сообщения), когда «ключом» не является «NULL».

Поэтому, если вы хотите использовать ключ, вам нужно сравнить полученный HMAC в R с HMAC на основе SHA2556 в Python.

В R:

library(openssl)
sha256("test@gmail.com", key = "111")
#[1] "172f052058445afd9fe3afce05bfec573b5bb4c659bfd4cfc69a59d1597a0031"

В Python 3:

import hmac
import hashlib
print(hmac.new(b"111", b"test@gmail.com", hashlib.sha256).hexdigest())
#172f052058445afd9fe3afce05bfec573b5bb4c659bfd4cfc69a59d1597a0031
...