AS3 RSAKey.sign() != PHP openssl_sign()
Posted
技术标签:
【中文标题】AS3 RSAKey.sign() != PHP openssl_sign()【英文标题】: 【发布时间】:2016-07-12 01:36:31 【问题描述】:大家!
我有一些 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 不同。 有没有人有想法让它等于?
谢谢。
【问题讨论】:
您好 Sergeev Ivan,让我描述一下问题:openssl_sign() 从数据创建摘要并加密有关摘要种类的信息,其默认加密函数是 OPENSSL_ALGO_SHA1 当您使用 rsaKey.sign 创建签名时,所以两个签名不同 JK 帕特尔,感谢您的评论。好的,我明白了,但我的任务仍然是实际的。我需要克隆 openssl_sign()。是的,这是我关于 upwork 的帖子 【参考方案1】:也许是迟到的答案,但无论如何...... 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 版本中都得到了相似的结果。
【讨论】:
以上是关于AS3 RSAKey.sign() != PHP openssl_sign()的主要内容,如果未能解决你的问题,请参考以下文章