Найти - Пользователи
Полная версия: Вопрос по подписи в PyCrypto
Начало » Python для экспертов » Вопрос по подписи в PyCrypto
1
timas
Добрый день. Раньше с RSA дело не имел, поэтому, возможно, просто смотрю не в ту сторону.
В общем, нужно “подписав SHA1-дайджест зашифрованного сообщения при помощи своего закрытого ключа”

# -*- coding: utf-8 -*-
from hashlib import sha1
from Crypto.PublicKey import RSA

private_key = '''-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCf37vGP34RkCjyWf9TZZWAOEFjpahzvjLnPLpUvbqw1AyahUsw
Ky22VQzEd9+kV77eglEXWnatCEwMwqflIoIaXFsBM4dhamkuGWipE1t2Qok1o2z4
8VIav9p8ymJQdSZMMaLIC3swnA2J1Zbv1Cuvpt7XJtMBVHGvMp3k42nZywIDAQAB
AoGANFr6jUPBr1K8dhFO8iq0ONczYsSfU7gXx241vwabGsl2jyvToaSiRbG4iqaP
EKzDju6yS6mOb7/l18/vV7RjUmXLQrcYhkbKNSiAjO/fXnfm+5L7n+rswJiqVmoo
RqPnUEYAX/NkIEVpQeblJfS3UJKBX5eqVS77ukGShTfRzQECQQC78YMBXXd+CgEw
wkB+l9DV5bBQlg7ripHau72JdWYKk25ZKGwN4+Je9tajjMj3M/CP8uoEvC/yoWU+
6lyngAeLAkEA2cQp+sdlPmg9ylsyZhkYQKeVI/7i4g8PpCwwZbQOmpi7qwAfBGOd
Cni7o4K7/UcTlw2ueX+z/9+W98V8hEG+wQJBAJ9MKPnzOuC9ohytyPSDwSJLOJJV
XfgOz2lST2g+9WppY9J2DIAJc0mCdpLRNVUx1OhtwCSbTRid667T/gyK29kCQFuR
1y0yx2n0n3cF3i18g+w8C8S1G2Z/es5IHpnFmxZ6/v8q7+ACmziaCBz7jl00lBJC
mIlSn7gKpwrNKkza8IECQAOhp5MQbBZJJdbpUQeILbFR3uVvXezOOMYTEpF7KN+6
AxgbIrRnyKwCO7Z386J/f5FOtPsZzYnWpT1v3uYDFWQ=
-----END RSA PRIVATE KEY-----
'''

rsa_key = RSA.importKey(private_key)

text = "some text"

digest = sha1(text).digest()

signature = rsa_key.sign(digest, '')
print signature
>>> 
(93791097478314105902657982989509548054339687330356223461377283822893374562169144439022169214818023734997223128303198532406780872853871310568150249787086061112086978971515617371734945446004900346599194725467656868264518955492899525874434659608132369802772603273196835472473726053480292709766686069118469891915L,)
Смущает то, что подпись выдает 308 символов, а должна быть для 1024-битного ключа - 128 байт. Во всех примерах что нашел в интернете, подпись дает тоже самое количество.
Может кто-то работал с этим в Python и может подсказать куда лучше двигаться
timas
В общем один хороший человек подсказал, что надо двигаться в эту сторону:
from Crypto.Hash import SHA
digest = SHA.new(text).digest()

from Crypto.Util import number
signature = number.long_to_bytes(rsa_key.sign(digest, '')[0])

print signature, len(signature)
Если кому-то интересно :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB