На основе документа Google и 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
в строке, возвращающей результат.Я фактически передал зашифрованные данные в эту функцию.И я думаю, что это не из-за ключа, так как он не должен выдавать ошибку, как это