1

PKCS#1 を使用して Javascript/PHP で暗号化/復号化を試みています。次の変数があります。

e: Public exponent (for encryption)
d: Private exponent (for decryption)
n: modulus

このjavascriptライブラリを使用して復号化しています: http://www-cs-students.stanford.edu/~tjw/jsbn/rsa.js 次のように:

    var rsa = new RSAKey();

    rsa.setPublic(n, e);

    var cipherText = rsa.encrypt(plainText);

PHP で復号化するには、PHPSec ライブラリを使用します。

質問 1: d と n を phpseclib で使用する秘密鍵に変換するにはどうすればよいですか?

質問 2: Javascript コードからの出力を phpseclib で使用できる形式に変換するにはどうすればよいですか?

4

2 に答える 2

0

JavaScript / PHPの相互運用性については、これをチェックしてください:

http://area51.phpbb.com/phpBB/viewtopic.php?f=84&t=33024&start=0

PKCS#1 v2.1 RSAES-OAEP (PKCS#1 v2.1 RSASSA-PKCS1-v1_5 よりも優れたセキュリティを提供するはずです) を実行します。

$rsa->loadKey( array( 'e' => new Math_BigInteger('...', 256), 'n' => new Math_BigInteger('...', 256) ) );

それでもうまくいかない場合は、お知らせください。

または、これを試すこともできます:

http://www.frostjedi.com/phpbb3/viewtopic.php?p=331621#p331621

(2 番目のコード ブロックを参照)

js出力をPHPが使用できる形式に変換するために...私がリンクした概念実証は、出力をchar2hex()に渡すことです:

function char2hex(source)
{
   var hex = "";
   for (var i = 0; i < source.length; i+=1)
   {
      temp = source[i].toString(16);
      switch (temp.length)
      {
         case 1:
            temp = "0" + temp;
            break;
         case 0:
           temp = "00";
      }
      hex+= temp;
   }
   return hex;
} 

幸運を!

于 2012-12-13T17:08:10.323 に答える
0

それ以来、あなたはすでに問題の解決策を見つけていると思いますが、まだ解決策を探している人のために、Javascript と PHP の間で RSA を使用する小さな例を次に示します (例):

<?php
$path = 'phpseclib';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
include_once('Crypt/RSA.php');

$rsa = new Crypt_RSA();
$rsa->setPublicKeyFormat(CRYPT_RSA_PUBLIC_FORMAT_RAW);
$key = $rsa->createKey(512);
$e = new Math_BigInteger($key['publickey']['e'], 10);
$e = $e->toHex();
$n = new Math_BigInteger($key['publickey']['n'], 10);
$n = $n->toHex();
function decrypt($msg, $key) {
    $rsa = new Crypt_RSA();
    $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
    $rsa->loadKey($key, CRYPT_RSA_PRIVATE_FORMAT_PKCS1);
    $s = new Math_BigInteger($msg, 16);
    return $rsa->decrypt($s->toBytes());
}
?>
<script type="text/javascript" src="javascript/jsbn.js"></script>
<script type="text/javascript" src="javascript/prng4.js"></script>
<script type="text/javascript" src="javascript/rng.js"></script>
<script type="text/javascript" src="javascript/rsa.js"></script>
<script>
<?php
echo "var n='".$n."';";
echo "var e='".$e."';";
?>
function encrypt() {
    var rsa = new RSAKey();
    rsa.setPublic(n, e);
    document.getElementById('enc_text').value = rsa.encrypt(document.getElementById('plaintext').value);
}
</script>

Plain Text:<br/>
<input id='plaintext' name='plaintext' type="text" size="40"/><br/>
<input type="button" onclick="encrypt()" value="Encrypt"/><br/>
Encrypted Text:<br/>
<form action="" method="post">
<input id="enc_text" name='enc_text' type="text" size="40"/><br/>
<?php
echo '<input id="key" name="key" type="hidden" size="40" value="'.urlencode($key['privatekey']).'"/><br/>';
?>
<input name="submit" type="submit" value="Submit" size="10"/>
</form>
<?php
if(isset($_POST['submit']) && ($_POST['enc_text'] != 0)) {
echo decrypt($_POST['enc_text'], urldecode($_POST['key']));
}
?>

さらに例が必要な場合は、ドキュメントの公式 Web サイト ( http://phpseclib.sourceforge.net/new/rsa/examples.html ) にアクセスしてください。

また

http://bestmike007.com/2011/08/secure-data-transmission-before-pure-php-and-javascript-using-rsa/

于 2015-10-15T12:59:33.690 に答える