簡體   English   中英

如何將SHA256哈希從整數轉換為字符串並返回?

[英]How can I convert a SHA256 hash from integer to string and back?

我想在MySQL中存儲大量的SHA256位哈希值。 我不想將它們存儲為VARCHAR(64),而是存儲為BIGINT。 在Python中進行轉換的最有效方法是什么? 我要完成的代碼示例:

>>> import hashlib
>>> s = hashlib.sha256("foo").hexdigest()
>>> s
'2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae'
>>> i = int(s, 16)
>>> i
19970150736239713706088444570146546354146685096673408908105596072151101138862L

鑒於 ,我怎么返回S-到底是什么? 我試過了:

>>> hex(i)
'0x2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7aeL'

這很接近但不一樣。 謝謝!

編輯:我想避免轉換十六進制字符串,以擺脫前導0x和尾隨L:

>>> hex(i)[2:-1]
'2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae'

此外,如果散列有前導零位,我必須填充零,直到它的長度為64,如:

>>> s = "00000000000000003258ec44ea34c98111234904ef7642608922f9b8b296067d"
>>> i = int(s, 16)
>>> i
1234513556969586830351532907052865231487419381722987759229L
>>> h = hex(i)[2:-1]
>>> h
'3258ec44ea34c98111234904ef7642608922f9b8b296067d'
>>> h = "0" * (64 - len(h)) + h
'00000000000000003258ec44ea34c98111234904ef7642608922f9b8b296067d'

我想避免字符串操作。

如果您不喜歡hex給出的字符串表示,則可以使用字符串格式:

'{:x}'.format(i)
Out[32]: '2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae'

編輯:字符串操作也允許您指定最小寬度和填充值:

'{:0>64x}'.format(i)
Out[54]: '2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae'

s = "00000000000000003258ec44ea34c98111234904ef7642608922f9b8b296067d"

i = int(s,16)

'{:0>64x}'.format(i)
Out[57]: '00000000000000003258ec44ea34c98111234904ef7642608922f9b8b296067d'

或者如果您願意,只需在第一種方法上使用zfill

'{:x}'.format(i).zfill(64)
Out[67]: '00000000000000003258ec44ea34c98111234904ef7642608922f9b8b296067d'

另一種方法是使用切片

>>> hex(i)[2:-1]
'2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM