是否可以在 Python 中输出类似于 CryptoJS.enc.Hex.parse(hash) 的单词数组
Is it possible to output word array in Python similar to CryptoJS.enc.Hex.parse(hash)
有没有办法像在 JS 中那样在 Python 中将散列转换为单词数组?
在带有 CryptoJS 的 JS 中,我可以使用:CryptoJS.enc.Hex.parse(hash)
这将输出单词数组。
我尝试用谷歌搜索它,但似乎无法在 Python 中找到如何做到这一点。
Javascript 示例:
var CryptoJS = require("crypto-js");
var hash = "c8f3ab9777da89748851932d3446b197450bb12fa9b9136ad708734291a6c60c";
console.log(hash);
我不知道如何使用 Python 中的 hmac 和 hashlib 库获得类似的输出,但我希望输出是这样的:
{ words:
[ -923554921,
2010810740,
-2007919827,
877048215,
1158394159,
-1447488662,
-687312062,
-1851341300 ],
sigBytes: 32 }
更新:
我需要以完全相同的格式(间距、缩进、换行)输出,以便从输出中生成后续散列。
您可以在 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}
希望对您有所帮助。
有没有办法像在 JS 中那样在 Python 中将散列转换为单词数组?
在带有 CryptoJS 的 JS 中,我可以使用:CryptoJS.enc.Hex.parse(hash)
这将输出单词数组。
我尝试用谷歌搜索它,但似乎无法在 Python 中找到如何做到这一点。
Javascript 示例:
var CryptoJS = require("crypto-js");
var hash = "c8f3ab9777da89748851932d3446b197450bb12fa9b9136ad708734291a6c60c";
console.log(hash);
我不知道如何使用 Python 中的 hmac 和 hashlib 库获得类似的输出,但我希望输出是这样的:
{ words:
[ -923554921,
2010810740,
-2007919827,
877048215,
1158394159,
-1447488662,
-687312062,
-1851341300 ],
sigBytes: 32 }
更新: 我需要以完全相同的格式(间距、缩进、换行)输出,以便从输出中生成后续散列。
您可以在 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}
希望对您有所帮助。