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



actionscript-3 actionscript (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 संस्करणों में समान परिणाम प्राप्त कर रहा हूं।

हर कोई!

मेरे पास कुछ पाठ को हस्ताक्षर करने के लिए कुछ 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());
}

मेरे पास एक ही निजी कुंजी फ़ाइल है मुझे उम्मीद है कि आउटपुट मान बराबर हैं। लेकिन ये मूल्य भिन्न हैं = (मैं क्या कर रहा हूँ गलत है?

अद्यतनः मैंने अपने एन्कोडेड बेस 64 स्ट्रिंग को सार्वजनिक कुंजी का उपयोग करने और विधि सत्यापित करने की कोशिश की - एक्शनस्क्रिप्ट के अंदर सब कुछ ठीक है उदाहरण:

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

मेरे मूल पाठ और डीकोड किए गए मान बराबर हैं I इसलिए, मैंने निष्कर्ष निकाला है कि AS3 हस्ताक्षर करने के तरीकों PHP से भिन्न हैं I क्या किसी को इसके बराबर बनाने का विचार है?

धन्यवाद।





as3crypto