python openssl digital-signature pki m2crypto

python - M2Crypto RSA.sign vs OpenSSL rsautl-sign



digital-signature pki (1)

M2Crypto y OpenSSL CLI no parecen crear la misma firma digital. Aquí está el código que uso en Python:

import M2Crypto rsa = M2Crypto.RSA.load_key("privkey.pem") open("sig_m2crypto", "w").write(rsa.sign("md5-digest", "md5"))

Aquí está la línea de comando con OpenSSL:

echo "md5-digest" | openssl rsautl -sign -inkey privkey.pem > sig_openssl

Con la misma entrada, el resultado de sig_m2crypto y sig_openssl siempre es diferente. El significado sería que no puedo verificar las firmas generadas usando M2Crypto con OpenSSL y viceversa.

¿Falta algo en mi código que los haga no compatibles entre sí?

Información adicional: estoy usando M2Crypto 0.21.1 y OpenSSL 1.0.0 en Windows 7.


prueba esto:

echo -n "test" | openssl md5 -sign privkey.pem > sig_openssel

(el -n es importante para que no se agregue nueva línea adicional después de la cadena) *

y en el lado de python:

import M2Crypto import hashlib rsa = M2Crypto.RSA.load_key("privkey.pem") digest = hashlib.new(''md5'', ''test'').digest() open("sig_m2crypto", "w").write(rsa.sign(digest, "md5"))

Ahora tu Sigs debería ser idéntico.

Para ver lo que está actualmente en el archivo de firma, puede usar:

openssl rsautl -inkey privkey.pem -verify -in sig_m2crypto -asn1parse

y

openssl rsautl -inkey privkey.pem -verify -in sig_m2crypto -raw -hexdump

La firma correcta contiene información sobre el resumen utilizado, que no está contenido si solo usa openssl rsautl -sign ...

* editar: al menos en Linux, ya que estás en Windows, realmente no sé si lo necesitas.