使用 hashlib sha1 的 Python 加密基础知识

18 投票
3 回答
48935 浏览
提问于 2025-04-16 10:44

我在努力理解加密是怎么工作的,特别是在用Python编写代码方面。我只是想先掌握一些基础知识,写出最简单的代码。

我需要在两个不同的网站之间传递一个用户ID,但显然我需要用一个私钥来加密,这样网站2才能知道这个用户ID是来自网站1的。看起来这个链接里的代码对我有帮助:http://docs.python.org/library/hashlib.html#module-hashlib,不过里面的例子不是很好(或者我可能找错地方了)。

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

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

shared_private_key = "ABCDEF"

我想让网站1传递给网站2的用户ID是:

userID = "123456"

那么网站1应该如何用私钥加密我的用户ID,以便这个加密信息可以通过HTTP头部发送,然后网站2能够用共享的私钥解密并读取用户ID呢?

抱歉问这么基础的问题,但我还是没搞明白该怎么做。谢谢。

3 个回答

3

Python的标准库里没有加密算法。如果你需要加密功能,可以试试pycrypto这个库,它里面有一些示例可以参考,具体可以看这里

17

你需要的是一个加密库,而不是仅仅提供哈希算法的库。使用Python的hashlib库:

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

返回结果:2fd4e1c67a2d28fced849ee1bb76e7391b93eb12

根据这个哈希值,恢复原始信息是非常困难基本上是不可能的。你需要的是一个加密库,而Python的标准库里没有这样的库。在StackOverflow上有很多关于Python加密库的相关问题,可能会对你有帮助。

22

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。这样,你可以(大部分情况下)确保没有未经授权的人篡改了数据。

撰写回答