2017-09-02 72 views
0

散列鍵時真的需要使用字母b嗎?我只是混淆了它的用法。我可以在不使用b'的情況下使用方法2嗎?我怎樣才能在方法一中插入一個變量?Python:Blake2b的散列鍵中字母'b'的用法是什麼

from hashlib import blake2b 

key = 'Hello' 
blake2b(b'key').hexdigest() 


from hashlib import blake2b 

key = 'Hello' 
blake2b(key).hexdigest() 
+2

這意味着它實際上是一個*二進制字符串*:一個字節列表。但是這些字節在這裏由它們的ASCII等價物表示。兩者完全不同。你寫'key'的事實與可能的變量'key'沒有任何關係。 –

+0

Willem Van Onsem那麼,如何在blake2b()函數中插入變量名? – Jom

+0

上面的第二個例子應該按照你的意圖工作。不是嗎? – sma

回答

0

b在字符串的前面代表字節

  1. 你的第一個例子

    from hashlib import blake2b 
    
    key = 'Hello' 
    blake2b(b'key').hexdigest() 
    

    在這裏,您傳遞字符串'key'以字節爲blake2b。這不會插入變量key的內容。

  2. 第二個例子:

    from hashlib import blake2b 
    
    key = 'Hello' 
    blake2b(key).hexdigest() 
    

    插入可變key但作爲一個字符串,而不是它的字節表示。

你想要做什麼是

from hashlib import blake2b 

key = 'Hello' 
blake2b(key.encode()).hexdigest() 

最後一行構造使用str.format()一個字符串,它與format第一個參數替換{0}。通過這樣做,您可以在字符串前添加b

+2

這裏可能不需要字符串插值。 'key = b'Hello''也可以。 – sma

+0

這是真的,但如果字符串從其他來源獲取,則不能這樣做,假設'key = input()'。 – campovski

+0

字節串沒有'format'方法。你可以用'encode'將'str'轉換爲'bytes'。 – interjay

相關問題