Можно ли вывести массив слов в Python, аналогичный CryptoJS.enc.Hex.parse (hash) - PullRequest
0 голосов
/ 21 октября 2019

Есть ли способ преобразовать хеш в массив слов в Python, как в JS?

В JS с CryptoJS я могу использовать: CryptoJS.enc.Hex.parse(hash), который выведет массив слов.

Я попытался найти его в Google, но не могу найти, как это сделать в Python.

Пример Javascript:

var CryptoJS = require("crypto-js");

var hash = "c8f3ab9777da89748851932d3446b197450bb12fa9b9136ad708734291a6c60c";

console.log(hash);

Я не могу понять, как получить аналогичный вывод с помощью hmac и hashlibбиблиотеки в Python, но я ожидаю, что вывод будет выглядеть примерно так:

{ words:
   [ -923554921,
     2010810740,
     -2007919827,
     877048215,
     1158394159,
     -1447488662,
     -687312062,
     -1851341300 ],
  sigBytes: 32 }

Обновление: мне нужно иметь вывод в том же формате (интервалы, отступы, новые строки) для получения последующего хэша из вывода.

1 Ответ

0 голосов
/ 21 октября 2019

Вы можете сделать это в Python, но он не встроен как часть какой-либо криптографической библиотеки, о которой я знаю.

Простая реализация (требуется Python 3):


hash = "c8f3ab9777da89748851932d3446b197450bb12fa9b9136ad708734291a6c60c"

# Convert hex-encoded data into a byte array
hash_bytes = bytes.fromhex(hash)

# Split bytes into 4-byte chunks (32-bit integers) and convert
# The integers in your example a big-endian, signed integers
hash_ints = [
    int.from_bytes(hash_bytes[i:i+4], "big", signed=True) 
    for i in range(0, len(hash_bytes), 4)
]

# Print result
print({"words": hash_ints, "sigBytes": len(hash_bytes)})

Этовыдаст: {'words': [-923554921, 2010810740, -2007919827, 877048215, 1158394159, -1447488662, -687312062, -1851341300], 'sigBytes': 32}

Надеюсь, что поможет.

...