supplied sha1withrsaencryption openssl_sign into generar from firmar firma electronica documento con coerced certificado cannot php actionscript-3 actionscript openssl as3crypto

sha1withrsaencryption - AS3 RSAKey.sign()!=PHP openssl_sign()



php openssl_sign(): supplied key param cannot be coerced into a private key (1)

Tal vez es una respuesta tardía, pero de todos modos ... AS3 funciona bien en su segundo código, PHP necesita algunos ajustes, como este:

$privateKeyPath = "private.key"; $message = "hello"; $privateKey = openssl_pkey_get_private(file_get_contents($privateKeyPath)); openssl_private_encrypt($message, $signature, $privateKey); echo base64_encode($signature);

Acabo de verificar con la clave generada en este sitio: http://www.selfsignedcertificate.com/ y todo funciona bien, obtengo resultados similares en las versiones de PHP y AS3.

¡todo el mundo!

Tengo un código PHP para firmar un texto y funciona bien. Necesito tener el equivalente de este código en actionscript 3. Necesito tu ayuda.

$privateKeyPath = "private.key"; $message = "hello"; $privateKey = file_get_contents($privateKeyPath); openssl_sign($message, $signature, $privateKey); echo base64_encode($signature);

En AS3 I usando la biblioteca as3crypto para hacer el signo:

private function readPrivateKey():String { var f:File = new File("/Users/ivan/Desktop/private.key"); var fs:FileStream = new FileStream(); fs.open(f,FileMode.READ); var key:String = fs.readUTFBytes(fs.bytesAvailable); fs.close(); return key; } private function getSign():void { var message:String = "hello"; var privateKey:String = readPrivateKey(); var srcBA:ByteArray = new ByteArray(); var resultBA:ByteArray = new ByteArray(); var rsaKey:RSAKey; var base64encoder:Base64Encoder = new Base64Encoder(); srcBA.writeUTFBytes(message); rsaKey = PEM.readRSAPrivateKey(privateKey); rsaKey.sign(srcBA, resultBA, srcBA.length); b64encoder.encodeBytes(resultBA); trace(b64encoder.toString()); }

Tengo el mismo archivo de clave privada. Espero que los valores de salida sean iguales. Pero estos valores son diferentes = (¿Qué estoy haciendo mal?

ACTUALIZACIÓN : Intenté verificar mi cadena base64 codificada utilizando la clave pública y el método de verificación: todo está bien dentro de Actionscript. Ejemplo:

var text:String = "hello"; var srcBA:ByteArray; var desBA:ByteArray; var rsaKey:RSAKey; var encodedB64:String; // ENCODING srcBA = new ByteArray(); srcBA.writeUTFBytes(text); desBA = new ByteArray(); rsaKey = PEM.readRSAPrivateKey( readPrivateKey() ); rsaKey.sign(srcBA, desBA, srcBA.length); encodedB64 = Base64.encodeByteArray(desBA); trace("Original: " + text); trace("Encoded: " + encodedB64 ); // DECODING var srcBA2:ByteArray = new ByteArray(); var desBA2:ByteArray = new ByteArray(); var rsaKey2:RSAKey = PEM.readRSAPublicKey( readPublicKey() ); srcBA2 = Base64.decodeToByteArray( encodedB64 ); rsaKey2.verify(srcBA2, desBA2, srcBA2.length); trace("Decoded: " + desBA2.toString() );

Mi texto original y el valor decodificado son iguales. Entonces, llegué a la conclusión de que los métodos de firma AS3 son diferentes a PHP. ¿Alguien tiene idea de igualar?

Gracias.