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.