2016-03-24 9 views
3

皆さん!AS3 RSAKey.sign()!= PHP openssl_sign()

テキストに署名するためのPHPコードがあり、正常に動作します。私はこのコードをactionscript 3に相当する必要があります。私はあなたの助けが必要です。私は看板にするためにas3cryptoライブラリを使用して、AS3では

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

echo base64_encode($signature); 

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

私は、同じ秘密鍵ファイルを持っています。私は、出力値が等しいことを期待しています。しかし、これらの値は、私が間違っているのは何 (=異なる

UPDATE:私は、公開鍵を使用して、私のエンコードされたbase64文字列を検証し、方法を検証してみました - すべてはActionScriptの内部okです 例:?。

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よりも異なっていると結論付けている。 誰もがそれに等しい作るためのアイデアを持っていますか?

感謝。

+0

こんにちはSergeevイワンは、私は問題を記述してみましょう: openssl_signは()データからダイジェストを作成し、署名を作成するためにrsaKey.signを使用していながら、約種類の を消化し、そのデフォルトの暗号化機能がOPENSSL_ALGO_SHA1 で情報を暗号化するので、両方の署名異なっています –

+1

JKパテル、ご意見ありがとうございます。さて、私はそれを得ましたが、私の仕事はまだ実際です。私はopenssl_sign()のクローンを持つ必要があります。はい、それはアップワーク上の私のポストです –

答えて

0

多分それが後半の答えですが、とにかく... AS3は2番目のコードでは正常に動作し、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); 

私はちょうどこのサイトでgeneretedキーでチェック: http://www.selfsignedcertificate.com/とすべて正常に動作し、PHPとAS3の両方のバージョンで同様の結果が得られます。