使用 hashlib sha1 的 Python 加密基础知识
我在努力理解加密是怎么工作的,特别是在用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 个回答
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。这样,你可以(大部分情况下)确保没有未经授权的人篡改了数据。