python加密的基础知识w/hashlib sha1

ada*_*dam 15 python cryptography sha1 hmac hashlib

我很难完全理解加密的工作原理和编码方式,尤其是python.我只是试图了解基础并以最简单的形式创建代码.

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

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

那么让我们说每个网站都知道的共享私钥是:

shared_private_key = "ABCDEF"
Run Code Online (Sandbox Code Playgroud)

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

userID = "123456"
Run Code Online (Sandbox Code Playgroud)

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

我为提出这样一个基本问题而道歉,但我没有意识到应该怎么做.谢谢.

vz0*_*vz0 17

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)
Run Code Online (Sandbox Code Playgroud)

最后,您向网站2发送数据和签名.这样你就可以(大部分)确保没有未经授权的人篡改数据.


dev*_*oid 16

你想要的是一个加密库,而不是只提供哈希算法的加密库.使用python的hashlib库:

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

返回: 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12

鉴于这种乱码,这是 非常困难的不可能的(一般),以恢复原始消息.你想要的是一个加密库,Python标准库没有.在SO上有很多与python加密库有关的问题可能会有所帮助.