php - AS3 RSAKey.sign() != PHP openssl_sign() 函数

标签 php actionscript-3 actionscript openssl as3crypto

各位!

我有一些 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 不同。 有没有人有办法使它相等​​?

谢谢。

最佳答案

也许这是迟到的答案,但无论如何...... 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);

我刚刚检查了这个网站上生成的 key : http://www.selfsignedcertificate.com/一切正常,我在 PHP 和 AS3 版本中得到了相似的结果。

关于php - AS3 RSAKey.sign() != PHP openssl_sign() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36200585/

相关文章:

apache-flex - 事件的 Flash/Flex/ActionScript 3 AOP 项目?

flash - ActionScript 3 中的 .currentFrame

php - 有没有办法在不先创建我自己的函数的情况下将参数发送到回调函数?

php - PHP mysqli仅显示一个用户

php - PHP 函数末尾的 'return' 是什么意思?

php - 用户单击弹出窗口上的保存按钮刷新主窗口

actionscript-3 - 大数四舍五入 AS3

flash - 如何在 Flash 中的图像周围环绕文本 (actionscript 3)

flash - 将HTTPS与应用程序引擎一起使用可确保Flash SWF文件的安全轮询结果

apache-flex - 弹性图表上轴标签的位置,以及如何相对于它们定位事物