RSA связь между Javascript и Python

Я работаю над прототипом, поэтому он должен использовать RSA между расширением Chrome и сервером Python.

До сих пор я планировал использовать https://sourceforge.net/projects/pidcrypt/ и https://www.dlitz.net/. Тем не менее, хотя я могу получить дешифрование и шифрование для работы в соответствии с документацией, я не могу заставить его расшифровать сообщение друг друга.

Может кто-нибудь, пожалуйста, предложить библиотеки, которые взаимодействуют, или дайте мне знать, если я делаю что-то не так с этими библиотеками?

Из того, что я разработал, pidder использует заполнение в стиле шифрования RSA PKCS#1 (тип 2). По поиску, я вроде как понял, что это тип, который PyCrypto вызывает PKCS1_OAEP. Я не слишком уверен, но я попробовал стандарт, а другой два.

Помощь будет очень признателен!

2 ответа

Решение

Библиотека Javascript (pidCrypt) использует PKCS#1 v1.5 для шифрования RSA, а не OAEP.

Это поддерживается PyCrypto (см. Здесь). Вот пример для шифрования:

from Crypto.Cipher import PKCS1_v1_5
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA

message = 'To be encrypted'
h = SHA.new(message)

key = RSA.importKey(open('pubkey.der').read())
cipher = PKCS1_v1_5.new(key)
ciphertext = cipher.encrypt(message+h.digest())

И расшифровка:

from Crypto.Hash import SHA
from Crypto import Random

key = RSA.importKey(open('privkey.der').read())

dsize = SHA.digest_size
sentinel = Random.new().read(15+dsize)      # Let's assume that average data length is 15

cipher = PKCS1_v1_5.new(key)
message = cipher.decrypt(ciphertext, sentinel)

digest = SHA.new(message[:-dsize]).digest()
if digest==message[-dsize:]:                # Note how we DO NOT look for the sentinel
     print "Encryption was correct."
else:
     print "Encryption was not correct."

Обратите внимание, что схема шифрования PKCS#1 v1.5, как известно, сильно нарушена.

Можно ли вместо этого использовать HTTPS AJAX-соединение? Таким образом, у вас есть сквозное шифрование, не нужно беспокоиться об этом самостоятельно.

Другие вопросы по тегам