Python加密基础:使用hashlib sha1

18

我正在努力完全理解加密的工作原理和编码方式,特别是使用Python。我只是想掌握基础知识并以最简单的形式创建代码。

我将在两个不同的网站之间传递userID,但显然我需要使用私钥对其进行加密,以便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?

非常抱歉问这样一个基础的问题,但我现在还无法理解应该如何完成。谢谢。


4
换句话说,语言无关:哈希不等于加密。 - user395760
3个回答

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)

最后,您向Website 2发送数据和签名。这样,您可以(大多数情况下)确保没有未经授权的人篡改数据。


17
您需要的是一个加密库,而不仅仅是提供哈希算法的库。使用Python的hashlib库:
import hashlib
m = hashlib.sha1()
m.update("The quick brown fox jumps over the lazy dog")
print(m.hexdigest())

返回结果:

返回:2fd4e1c67a2d28fced849ee1bb76e7391b93eb12

给定这个哈希值,通常来说是 极其困难的 不可能恢复原始信息。你需要一个加密库,而Python标准库没有提供。在SO上有很多与 python密码学库 相关的问题,可能会有所帮助。


3

Python标准库没有加密算法。可以尝试pycrypto,它有一些示例在这里


hashlib.py模块不是标准的吗? - kommradHomer
7
它仅提供哈希函数,而非加密。 - Marek Sapota

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接