python加密基础w/hashlib sha1

2024-05-20 01:32:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难完全理解加密的工作原理和编码方式,特别是python。我只是想把基本的东西都写下来,用最简单的形式创建代码。

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

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

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

shared_private_key = "ABCDEF"

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

userID = "123456"

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

我很抱歉问了这么一个基本的问题,但我不明白该怎么做。谢谢。


Tags: 代码用户orgidhttpdocs站点形式
3条回答

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。这样你可以(主要)确定没有未经授权的人篡改数据。

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

你想要的是一个加密库,而不是仅仅提供散列算法的库。使用python的hashlib库:

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

返回:2fd4e1c67a2d28fced849ee1bb76e7391b93eb12

考虑到这个散列,恢复原始消息是非常困难的。您需要的是一个加密库,而Python标准库没有这个加密库。有很多questions related to python cryptography libraries这样可能会有帮助。

相关问题 更多 >