У меня есть CSV-файл с более чем 1000 адресов электронной почты, которые я хочу хэшировать с помощью SHA256 HMAC и общего ключа, закодированного в Base64.
Была аналогичная проблема здесь, но я не могу адаптировать решение к работай на меня. Я новичок в Python и не знаю, где изменить код, чтобы использовать общий ключ.
Это немного адаптированный код из ответа:
import csv
import hashlib
import hmac
import base64
IN_PATH = 'test.csv'
OUT_PATH = 'test_hashed.csv'
ENCODING = 'utf8'
HASH_COLUMNS = dict(Mail='md5')
def main():
with open(IN_PATH, 'rt', encoding=ENCODING, newline='') as in_file, \
open(OUT_PATH, 'wt', encoding=ENCODING, newline='') as out_file:
reader = csv.DictReader(in_file)
writer = csv.DictWriter(out_file, reader.fieldnames)
writer.writeheader()
for row in reader:
for column, method in HASH_COLUMNS.items():
data = row[column].encode(ENCODING)
digest = hashlib.new(method, data).hexdigest()
row[column] = '0x' + digest.upper()
writer.writerow(row)
if __name__ == '__main__':
main()
Входной файл (.csv) выглядит следующим образом:
Mail
[email protected]
DJÖ[email protected]
JSNÖ[email protected]
[email protected]
[email protected]
И с приведенным выше кодом выходной файл выглядит так:
0xB6A77B6EB853CC4CC8342B312293FA9C
0xEB439592D8EEC2A38A597350EF80E512
0x833EB6AEC1D03D7D8C94606E0D749B80
0x8007D8D1702E8A749EBD6033A52A7897
0x415E067487C4A5FBDB86AB0F855DB114
Но поскольку я хочу использовать HMAC с секретным ключом и sha256, приведенное выше решение мне не подходит, и я не знаю, как внедрить этот подход.
Ключ будет примерно таким:
123Abc
Я пытался сделать что-то подобное, но для всего файла:
import hmac
import hashlib
import base64
secret = "123Abc"
secret_bytes = bytes(secret, 'latin-1')
data = "[email protected]"
data_bytes = bytes(data, 'latin-1')
digest = hmac.new(secret_bytes, msg=data_bytes, digestmod=hashlib.sha256).digest()
signature = base64.b64encode(digest).decode()
Таким образом, мой вопрос заключается в том, как я могу включить хеширование HMAC SHA 256, используя секретный ключ, в приведенном выше коде? Я просто не могу понять, какие параметры изменить?
hashlib
документацию по модулю? - person Martijn Pieters   schedule 28.02.2018