2015-10-25 5 views
0
SHA = hashlib.sha1() 
Eh = SHA.update(chunk) 
HRSA.signSHA(Eh,RSAprivatekey) 

RSAprivatekey считывается в модуле HRSA и передается в качестве аргумента этой функции:PyCrypto: Атрибут Ошибка: объект «NoneType» не имеет атрибута «подъязычная» в то время как с помощью PKCS1_v1_5

RSAprivatekey = RSA.importKey(infile.read()) 

входной_файл указывает на " privatekey.txt ', который содержит только RSAprivatekey.

HRSA представляет собой модуль, я создал, который в основном делает это:

def signSHA(hash, key): 
    signer = PKCS1_v1_5.new(key) 
    D = signer.sign(hash) 
    return D 

Я показывается следующее сообщение об ошибке:

File "D:\Study\Sem V\Hybrid Encryption\Phase 2\HRSA.py", line 57, in signSHA 
    D = signer.sign(hash) 
    File "C:\Python33\lib\site-packages\Crypto\Signature\PKCS1_v1_5.py", line 110, in sign 
    em = EMSA_PKCS1_V1_5_ENCODE(mhash, k) 
    File "C:\Python33\lib\site-packages\Crypto\Signature\PKCS1_v1_5.py", line 211, in EMSA_PKCS1_V1_5_ENCODE 
    digestAlgo = DerSequence([hash.oid, DerNull().encode()]) 
AttributeError: 'NoneType' object has no attribute 'oid' 

Как я могу это исправить, так как это ошибка с код PyCrypto?

+1

У вас есть что-то в 'hash', вы можете отлаживать/печатать, чтобы проверить? Также переименуйте 'hash'' hash_', поскольку вы затеняете сборку в переменной 'hash' –

+0

. Что, объект« NoneType »стал объектом« bytes ». Отпечатано и проверено, есть бинарные данные, присутствующие в хеше. –

ответ

1

hashfunc.update(arg) ничего не возвращает. Он должен обновить внутреннее состояние хеширования с новыми входными данными. Если вы хотите преобразовать внутреннее состояние в хэш, вам необходимо позвонить либо hashfunc.digest(), либо hashfunc.hexdigest().

Это будет выглядеть следующим образом:

Eh = hashlib.sha1(chunk).digest() 
HRSA.signSHA(Eh, RSAprivatekey) 
+0

Да, было логически неправильно, но решение этого еще не решило ошибку. –

+0

Тогда проблема заключается в закрытом ключе. Как вы его читаете? В каком формате? Измените свой вопрос, чтобы включить всю необходимую информацию. –

1

Вы должны использовать модуль PyCrypto для SHA1, так:

from Crypto.Hash import SHA1 
sha_obj = SHA1.new() 
sha_obj.update(chunk) 
HRSA.signSHA(sha_obj,RSAprivatekey) 

Причина заключается в том, что PKCS # 1v1.5 подпись встраивает ASN. 1 Идентификатор объекта хеша, но объект SHA-1, полученный из стандартной библиотеки, не включает/не знает.

+0

пятно сверху, правильный sha256 из hashlib не работает –