python中的求和散列和键值

osh3o9ms  于 2022-12-24  发布在  Python
关注(0)|答案(1)|浏览(86)

我尝试对hash + Key求和以获得新的hash值。
密钥值:

a= "111631279578723877696242174"

SHA-256的哈希值:

b = "7de8c9d1ce09fd2554fc0468ae52d5144800d3ae3ae9b075a3ba4494e5e55f50"

我的想法是将它们转换为二进制值,然后将两者相加,但我得到了一个错误:

V1= list(map(bin, bytearray(a, "utf-8")))
V2=list(map(bin, bytearray(b, "utf-8")))
sum = bin(int(V1, 2) + int(V2, 2))

错误:
TypeError:int()无法转换具有显式基的非字符串
我怎样才能解决这个错误,或者是否有其他方法来组合键和散列?

a6b3iqyw

a6b3iqyw1#

原始答案

我想出了一个办法把它们结合起来。

>>> key=b'pvvFgKElhtkbDt0Lt7gOlcR4Kzwohz1UWZ8UzM2FKLg='
>>> _hash=b'gAAAAABiQX2cDIWlX4ySuBjkZsMyO09RiS0HJXEb7NvqfRbwj2W0rxko_fp1murmm6T1ZaE-dSkDOGNm1yA7bsq-rjXeiM-ckg=='
>>> hex(int.from_bytes(key,'little')+int.from_bytes(_hash,'little')).removeprefix("0x")
  • 结果:*
'3d3d6734373347716c355342313549617a2d4b697357527347384b495f49723132635a6c62436a6b6768586e66486950735265487650723783a99c90a57495f0aa819ea5c96abd99d6cfcb7c78aaabb2b39c8fbec175bdb38f9eccb9d5878ca887b7b7d7'

编辑

如果你想把它们组合起来,并且在得到密钥的时候仍然得到哈希值,你可以简单地使用异或。这被用在许多对称加密算法中,因为你可以通过对加密值和密钥使用异或来得到原始值。简而言之,我们关心的异或值的基本属性是:

  • 第一个月
  • original_value = encrypted ^ key

如果您有密钥,那么您可以使用加密的密钥获得原始值。

具体实施

这是我刚刚写的想法的一个实现。

import math

key=b'pvvFgKElhtkbDt0Lt7gOlcR4Kzwohz1UWZ8UzM2FKLg='
_hash=b'h\x05h\xc5\x14\xd4*\x10\x81\xf9\x84\nw\xe8\xc7M\x8bH\xf3\xc32\x97\xc2\x9f\x88@\xb5\xffH] v'

encrypted_int = int.from_bytes(_hash,'little') ^ int.from_bytes(key,'little')

lenght_bytes_encrypted = math.ceil(math.log(encrypted_int,0xFF))
print("encrypted form: ",encrypted_int.from_bytes(lenght_bytes_encrypted,'little')

#transforming back to _hash
hash_int = encrypted_int ^ int.from_bytes(key,'little')
lenght_bytes = math.ceil(math.log(hash_int,0xFF))
normal = hash_int.to_bytes(lenght_bytes,'little')
print("converted to base form:",normal)

输出

encrypted form:  b"\x1777\x07&\n\x07\x059,Y\x01\x00=g ,\x03\x1e\x1c\x19!8_\x11\t:\x16'J\x08\x07>\t\x08\x1d0\x15w$|\x02\x11LfRbwj2W0rxko_fp1murmm6T1ZaE-dSkDOGNm1yA7bsq-rjXeiM-ckg=="
converted base form: b'pvvFgKElhtkbDt0Lt7gOlcR4Kzwohz1UWZ8UzM2FKLg='

相关问题