ActionScript 3 — AS3 RSAKey.sign ()! = PHP openssl_sign ()

каждый!

У меня есть PHP-код для подписи текста, и он отлично работает. Мне нужно иметь эквивалент этого кода на ActionScript 3. Мне нужна ваша помощь.

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

echo base64_encode($signature);

В AS3 я использовал библиотеку as3crypto, чтобы сделать знак:

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());
}

У меня такой же файл закрытого ключа. Я ожидаю, что выходные значения равны. Но эти значения разные = (
Что я делаю неправильно?

ОБНОВИТЬЯ попытался проверить мою закодированную строку base64 с помощью открытого ключа и проверить метод — все в порядке внутри ActionScript.
Пример:

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() );

Мой оригинальный текст и декодированное значение равны. Итак, я заключаю, что методы подписывания AS3 отличаются от PHP.
У кого-нибудь есть идея сделать его равным?

Благодарю.

3

Решение

Может быть, уже поздно ответить, но в любом случае …
AS3 отлично работает во втором коде, PHP требует некоторых настроек, например:

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

echo base64_encode($signature);

Я только что проверил с ключом, генерируемым на этом сайте:
http://www.selfsignedcertificate.com/ и все работает отлично, я получаю одинаковые результаты как в версиях PHP, так и AS3.

0

Другие решения

Других решений пока нет …