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

时间:2016-03-24 12:47:19

标签: php actionscript-3 actionscript openssl as3crypto

大家好!

我有一些PHP代码来签署一些文本,它工作正常。我需要在actionscript 3上使用相同的代码。我需要你的帮助。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="row">
  <div class="news-header">This head will be two lines long. This head will be two lines long.</div>
  <div class="news-summary">body text body textbody text body textbody text body textbody text body textbody text body textbody text body textbody text body textbody text body textbody text body textbody text body text</div>
</div>

<div class="row">
  <div class="news-header">This head will be three lines long. This head will be three lines long. This head will be three lines long.</div>
  <div class="news-summary">body text body textbody text body textbody text body textbody text body textbody text body textbody text body textbody text body textbody text body textbody text body textbody text body text</div>
</div>

在AS3中我使用as3crypto库来制作符号:

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

echo base64_encode($signature);

我有相同的私钥文件。我希望输出值等于。但这些值不同=( 我做错了什么?

UPDATE :我尝试使用公钥和验证方法验证我的编码的base64字符串 - 在Actionscript中一切正常。 例如:

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

我的原始文本和解码值等于。因此,我得出结论,AS3签名方法与PHP不同。 有人有想法让它等于吗?

感谢。

1 个答案:

答案 0 :(得分:0)

也许它的答案很晚,但无论如何...... 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版本中都得到了类似的结果。