17

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

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

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

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

shared_private_key = "ABCDEF"

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

userID = "123456"

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

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

4

3 回答 3

20

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 发送数据和签名。这样你就可以(大部分)确定没有未经授权的人篡改数据。

于 2011-01-27T18:21:12.027 回答
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密码库相关的问题可能会有所帮助。

于 2011-01-27T18:24:55.663 回答
3

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

于 2011-01-27T18:12:18.700 回答