【问题标题】:Can you apply sha256 two times to a single string?您可以将 sha256 两次应用于单个字符串吗?
【发布时间】:2019-02-24 12:34:20
【问题描述】:

函数我已经写出来了:

print(hashlib.sha256(hashlib.sha256(Encode(s))).hexdigest())

但是,似乎出现以下错误:

需要支持缓冲区 API 的对象

我相信这是因为在第二次散列时,输入不是字节形式,因为它已经被散列了。

我怎样才能解决这个问题并将单个字符串哈希两次?

【问题讨论】:

  • 使用sha256.digest(),而不是sha256.hexdigest()
  • 谢谢!但是,问题要求打印出十六进制数字。那我该怎么办?
  • 好吧,你当然可以调用hexdigest() 来最终应用sha256,或者你可以调用得到的字节对象上的hex() 方法。选择是你的,做一些实验。为了清楚起见,问题从不要求打印出十六进制值。
  • Encode 在这里做什么?这很可能是罪魁祸首。如果你不确定你的错误是在哪里产生的,那就把 split the line 分成多个语句。

标签: python cryptography sha256


【解决方案1】:

这段代码怎么样(james-k-polksuggested)?

print(hashlib.sha256(hashlib.sha256(s.encode('ascii')).digest()).hexdigest())

【讨论】:

    【解决方案2】:

    如果你想在一行中完成,这很有效

    from hashlib import sha256 as h
    print(h(h("your_string".encode()).hexdigest().encode()).hexdigest())
    
    # Gives: c94c01dafc045892773d67dabb3da8feb925e2c48e0373eab922da49f7fd269c
    # Encrypted once: e10207f241d66a8c5f8202ed9fc22b94c031850dd54d8b03fdd40db4cbde5bfc
    

    【讨论】:

    • 非常感谢!
    • 请将此标记为答谢我的时间。
    • 这会返回错误的结果,因为它返回的是十六进制编码的哈希值,而不是字节值本身。
    猜你喜欢
    • 2022-06-28
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 2015-03-13
    • 1970-01-01
    • 2021-05-17
    相关资源
    最近更新 更多