У сервиса есть закрытый ключ, у меня есть открытый ключ.
Сервис написал: «Зашифруйте данные с помощью RSA SHA512, сравните их с заданным HEX-хешем. Если зашифрованные данные совпадают с заданными данными, операция будет успешно завершена».
Я думаю, это проверка подписи, но я не уверен, пожалуйста, объясните мне.
Мой открытый ключ:
-----BEGIN RSA PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzsyBqCUMdYwNdRTMPYxV
4/DbvtUVv8U7BC3PdvXbZFLwC9CMCEfwzMisDppRJVUhoPs+o4rO1SIOTGKbYZl0
CDvz6sxjO40NcoX57qA4WdPVYp6gxrLwRgs7Od2nzTtwq6gjagYhysZZJdybShzz
am3K2KEjedi4YrJDCVJlSJB5yAKM242jK8sCPboNy3EASVUavLBQE9pnisZPYyuf
ThiAZY9mXKmK60FthFg9R8vVb2Ug/iKKHdbp/cNiFnIm5PMDUMV0XF2YHtr9Ft8t
D8Ub0c5oZbKmKsXvE/zjb06K153utY4KOE+BIJx0xc8qxhudYdcQhEusxaKu9+Zn
FwIDAQAB
-----END RSA PUBLIC KEY-----
Я написал такой код
from Crypto.Signature import PKCS1_v1_5
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA512
data = b'mdOrder;2930808c-6fa8-71f5-b6ff-54085e4149db;operation;deposited;orderNumber;#19, , kalik;sign_alias;stoloto;status;1;' # Data to encrypt
given_hash = "94463EB342F8DEE6F70497383DE9F0802A4FF6450D6B4B97FD5E5A72E4AB7EDA708DCE525DF9E30296FBF22C19CE509FD2A4AA76D7C0A48187307903328B2FEFDB707A71A8A407B4A4C41399D8302C0D01F5E0EA89BDEBD7E22D8763CCFB83254C4D82F9FD4D6D8146B5538AB552016C89BA7E509CF26296ABEACD79CE74B30AF01902670A434B44F0F8AB94B0BCEEE1DFE6DC052AB76B7D6BE9B8507296E66FBA3C7E024B6CB828061D54F92D66D8FE8955F2F6C10FC8FF7A281BD399B0FD5F40C46440A6B8FDEA4E5718C12ECF11C4952089FA26A7A3D6AB8BAE8D02C598133A2FB8DD85109EDAC2301C492DCB55FFA54C508349A51AD735573B8CC8D71518" # The service hash (given in uppercase)
pubkey = RSA.import_key(PUBLIC_KEY)
signer = PKCS1_v1_5.new(pubkey)
hash_ctx = SHA512.new()
hash_ctx.update(data)
signature = signer.sign(hash_ctx)
signer.verify(hash_ctx, signature)
Но этот код не использует
given_hash
, а
hash_ctx
даже не является объектом Hash,
signature
неверна.
Так что я просто не понимаю, как решить это...
Так как это специфичный случай, я думаю, мне нужно зашифровать данный в SHA512, отформатировать в верхнем регистре, а затем сравнить.
Должен ли я просто зашифровать свое сообщение (
data
) с помощью открытого ключа и сравнить его с заданным хешем просто с помощью
==
?
Если это верно, помогите пожалуйста мне написать код