Python:字母';b';使用Blake2b对密钥进行散列

Python:字母';b';使用Blake2b对密钥进行散列,python,Python,在散列密钥时是否真的需要使用字母b?我只是对它的用法感到困惑。我可以不使用b'而使用方法2吗?如何在方法一中插入变量 from hashlib import blake2b key = 'Hello' blake2b(b'key').hexdigest() 对 字符串前面的b表示字节 你的第一个例子 from hashlib import blake2b key = 'Hello' blake2b(b'key').hexdigest() 在这里,您将字符串'key'作为字节传递到bla

在散列密钥时是否真的需要使用字母b?我只是对它的用法感到困惑。我可以不使用b'而使用方法2吗?如何在方法一中插入变量

from hashlib import blake2b

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



字符串前面的
b
表示字节

  • 你的第一个例子

    from hashlib import blake2b
    
    key = 'Hello'
    blake2b(b'key').hexdigest()
    
    在这里,您将字符串
    'key'
    作为字节传递到
    blake2b
    中。这不会插入变量
    键的内容

  • 第二个例子:

    from hashlib import blake2b
    
    key = 'Hello'
    blake2b(key).hexdigest()
    
    插入变量
    ,但作为字符串而不是其字节表示形式

  • 你想做的是

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

    最后一行使用
    str.format()
    构造一个字符串,它用
    format
    的第一个参数替换
    {0}
    。通过这样做,您可以在字符串前面添加
    b

    这意味着它实际上是一个二进制字符串:一个字节列表。但是字节在这里是由它们的ASCII等价物表示的。两者完全不同。编写
    key
    与可能的变量
    key
    无关。Willem Van Onsem那么如何在blake2b()函数中插入变量名呢?上面的第二个示例应该按照您的预期工作。不是吗?如果您使用的是Python 2,
    b'foo'
    'foo'
    相同。这里可能不需要字符串插值
    key=b'Hello'
    也可以。这是真的,但如果字符串来自其他源,比如说
    key=input()
    ,则无法执行此操作。ByTestRing没有
    格式
    方法。您可以使用
    encode
    str
    转换为
    bytes
    。同样,如果
    键不是按原样键入的,而是从其他来源获取的,该怎么办?上面的示例已经过编辑和测试。。。
    
    from hashlib import blake2b
    
    key = 'Hello'
    blake2b(key.encode()).hexdigest()