2017-02-03 26 views
0

リモートWebサイトでPHPスクリプトを使用して自分自身を認証する必要があり、WebサイトでJSベースのRSA暗号化をパスワード用に使用します。ここでは、ウェブサイトからのコードは次のとおりです。JavaScript RSA暗号化とPHP

function rsa_encrypt(strPlainText) { 
    var strModulus = "some_random_string"; 
    var strExponent = "10001"; 
    var rsa = new RSAKey(); 
    rsa.setPublic(strModulus, strExponent); 
    var res = rsa.encrypt(strPlainText); 
    if (res) { 
     return res; 
    } 
    return false; 
} 

は、このウェブサイト上のトピックの多くをブラウズされ、推奨される方法は、(別の1があるなら、私に知らせて)phpseclibを使用することであることがわかりました。しかし、http://phpseclib.sourceforge.net/rsa/examples.html#encrypt,enc2の基本的な例を使用すると、空のページだけが得られます。私はsome_random_string$rsa->loadKey('...');に入力しました。しかし、この例ではstrExponent(10001)と入力する場所が見つかりません。

だから私は別のソリューションを試みた - Encrypt and Decrypt text with RSA in PHPをし、次のことを見て自分のコードを変更:

include('Crypt/RSA.php'); 

$privatekey = "some_random_string"; 

$rsa = new Crypt_RSA(); 
$rsa->loadKey($privatekey); 

$plaintext = new Math_BigInteger('10001'); 
echo $rsa->_exponentiate($plaintext)->toBytes(); 

しかし、私はこのエラーを取得:

Fatal error: Call to a member function abs() on null in Math\BigInteger.php on line 1675 

溶液はいくつかの時間前に投稿されましたので、私はこの間にphpseclibライブラリで何か変わったと思うし、自分のコードをどのように変更するか分からない。

答えて

0

RSAキーの一般的なフォーマットには、通常、指数とモジュラスが含まれています。特定のタイプのキーフォーマットの詳細については、例えば、I understand the mathematics of RSA encryption: How are the files in ~/.ssh related to the theory?への私の答えを参照してください。

あなたが指数を持っており、モジュロ場合など個別の値は、これをやってみてください:

$rsa->loadKey([ 
    'e' => new Math_BigInteger('10001', 16), 
    'n' => new Math_BigInteger('some_random_string', 16); 
]); 

, 16ビット。 65537(10001の16進数)は、共通のRSA指数です。 Math_BigIntegerは、特に指定しない限り、デフォルトで渡される数値が10進数であることを前提としています。 RSAの要件の1つは、eがφ(n)またはlcm(n)のいずれかに反比例することである。 プライムであるため、65537は自明です。 10001は素数ではありません。それは73 * 137に因数分解することができます。