Не удалось проверить подпись для данных, подписанных в python

#python #java #signature

Вопрос:

Ниже приведен код, используемый для подписи данных с помощью python:

 # SIGN rsa_key = get_key(priv_key_file) signature = sign_file(rsa_key, encrypted)   def sign_file(rsa, byte_buffer): h = SHA256.new(byte_buffer.getbuffer()) signature = b64encode(pss.new(rsa).sign(h)) return signature  

В приведенном выше коде » h » относится к генерации хэш-значения SHA-256. И сгенерированное хэш-значение, т. е. «h», подписывается.

На стороне Java я генерирую хэш-значение из данных, которые точно такие же, как и в Python. Но не удалось проверить подпись. ниже приведен код, используемый для проверки подписи в Java:

 Signature verifier = Signature.getInstance("SHA1WithRSA"); verifier.initVerify(publickey); verifier.update(signedHash.getBytes()); boolean successFlg = verifier.verify(Base64.getDecoder().decode(signedData));  

Однако, если я попытаюсь использовать подпись и проверку на Java, она успешно сможет проверить подпись. То же самое относится к подписанию и проверке в python.

Однако только при подписании на python и проверке на Java происходит несоответствие подписи.

Пожалуйста, помогите в этом деле.

Комментарии:

1. Итак, в Python вы подписываете его с помощью SHA256, а в Java вы подтверждаете его с помощью SHA1withRSA? Как они могут совпадать, если вы используете разные алгоритмы?

2. Отредактировал мой вопрос, сэр.

3. Безопасность — это не мое, но все же я не понимаю, почему в Java-коде вы просто не делаете Signature.getInstance("SHA256"); этого ?

4. Попробовал использовать : Signature.getInstance(«SHA256withRSA»); по-прежнему возникает та же проблема. Попытка с помощью Signature.getInstance(«SHA256») показывает сообщение об ошибке : Подпись SHA256 недоступна