【发布时间】:2019-10-13 02:37:04
【问题描述】:
基于Google document 和cryptography.io。
我尝试加密一个 JSON 格式的查询结果,类似于 {"data":"abc"}。据我所知,使用 SHA256 加密时,加密的数据将采用 64 个字符的形式,但在我查看并尝试使用链接中的代码和一些修改后,我得到的结果是 512 个字符而不是 64 个字符。
这是我的代码:
def encrypt_rsa(_rsa_pub, plaintext):
key_txt = _rsa_pub.encode()
public_key = serialization.load_pem_public_key(key_txt, default_backend())
# encrypt plaintext
pad = padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None)
return public_key.encrypt(plaintext, pad)
pk = ....#public key
message = .... #query result (JSON)
x = json.dumps(message).encode('utf-8')
enc = encrypt_rsa(pk , x)
enc = base64.b64encode(enc).decode()
dec = decrypt_rsa(enc)
没有错误,但我得到了一个包含 512 个字符的长加密数据,这真的很奇怪。我尝试使用cryptography.io 的代码对其进行解密,但出现错误:
AttributeError: 'str' object has no attribute 'decrypt'
我认为这个错误可能是因为错误的加密数据应该是 64 个字符,但输入是 512 个字符。那么,根据我的情况,我忘记了什么或者应该在这段代码中添加什么以使其成为可以解密的 64 个字符的加密数据?
编辑:解密函数
def decrypt_rsa(ciphertext):
private_key = .....
pad = padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None)
return private_key.decrypt(ciphertext, pad)
错误发生在返回结果的行decrypt。我实际上将加密的数据传递给了这个函数。而且我认为这不是因为密钥,因为它不应该提供这样的错误结果
【问题讨论】:
-
在这一行
algorithm=hashes.SHA256(),你确定不应该是algorithm=hashes.SHA256,吗? -
我从谷歌文档中复制了所以..是的(上面的链接)
-
@Nullman:一个合理的猜测,但我对这个包很熟悉,他的那部分是正确的。
标签: python encryption hash cryptography rsa