Итак, я пытался лучше познакомиться с криптографией, используя python (в частности, pycryptodome), и столкнулся с интересной проблемой, пытаясь декодировать строку байтов в ascii. Пожалуйста, смотрите код ниже:
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA
from Crypto.PublicKey import RSA
message = b'Something secret'
random_gen = Crypto.Random.new().read
print("Type of random_gen: {}".format(type(random_gen)))
private_key = RSA.generate(1024, random_gen) # private key
public_key = private_key.publickey() # public key
signer = PKCS1_v1_5.new(private_key) # signer which uses private key
verifier = PKCS1_v1_5.new(public_key) # verifier which uses public key
h = SHA.new(message) # hash of message
print("Hash: {}".format(h.hexdigest()))
signature = signer.sign(h) # sign hashed version of message
print("Signature type = {}".format(type(signature)))
print("Signature: {}".format(binascii.hexlify(signature).decode('ascii')))
Почему в самой последней строке кода я должен сначала hexlify()
сигнатуру типа <class 'bytes'>
перед декодированием ее в ascii, чтобы я мог прочитать подпись? Почему, если я делаю:
print("Signature: {}".format(signature.decode('ascii')))
Я получаю следующую ошибку:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x88 in position 2: ordinal not in range(128)
Спасибо за помощь.
0x7F
. - person Panagiotis Kanavos   schedule 18.07.2018