【问题标题】:basics of python encryption w/ hashlib sha1带有 hashlib sha1 的 python 加密基础知识
【发布时间】:2011-06-16 17:50:27
【问题描述】:

我很难完全理解加密的工作原理和编码方式,尤其是使用 python。我只是想了解基础知识并以最简单的形式创建代码。

我将在两个不同的站点之间传递用户 ID,但显然我需要使用私钥对其进行加密,以便 Website2 知道它来自 Website1。这似乎是我的代码: http://docs.python.org/library/hashlib.html#module-hashlib,但它没有很好的例子(或者我可能是在错误的地方)。

我遇到的问题是完全理解如何编码和解码。

假设每个网站都知道的共享私钥是:

shared_private_key = "ABCDEF"

我希望 Website1 将以下用户 ID 传递给 Website2:

userID = "123456"

Website1 如何使用私钥加密我的 userID,加密可以通过 HTTP 标头发送,然后让 Website2 解密并能够使用共享私钥读取 userID?

对于提出这样一个基本问题,我深表歉意,但我不明白应该如何做到这一点。谢谢。

【问题讨论】:

  • 或者,把语言无关:hasing != encrypting。

标签: python cryptography sha1 hmac hashlib


【解决方案1】:

hashlib 模块提供散列函数。虽然与加密有一些关系,但一旦对某些数据进行哈希处理,就无法返回从哈希结果中获取原始数据。

您可以采用不同的方法来代替加密数据:使用数据的哈希值和一些秘密创建唯一签名。

shared_private_key = "ABCDEF"

def create_signature(data):
    return hashlib.sha1(repr(data) + "," + shared_private_key).hexdigest()

def verify_signature(data, signature):
    return signature == create_signature(data)

最后,您将数据和签名发送到网站 2。这样你就可以(大部分)确定没有未经授权的人篡改数据。

【讨论】:

    【解决方案2】:

    您想要的是一个加密库,而不仅仅是提供哈希算法的。用python的hashlib库:

    import hashlib
    m = hashlib.sha1()
    m.update("The quick brown fox jumps over the lazy dog")
    print(m.hexdigest())
    

    返回:2fd4e1c67a2d28fced849ee1bb76e7391b93eb12

    鉴于此哈希,极其困难不可能(通常)恢复原始消息。你想要的是一个 Python 标准库没有的加密库。 SO上有很多questions related to python cryptography libraries可能会有所帮助。

    【讨论】:

      【解决方案3】:

      Python 标准库没有加密算法。试试pycrypto,它有一些例子here

      【讨论】:

      • hashlib.py 模块不是标准的?
      • 它只提供哈希函数,不提供加密。
      猜你喜欢
      • 2021-08-31
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 2018-05-25
      • 2014-11-28
      • 2014-02-14
      相关资源
      最近更新 更多