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.