#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 недоступна