2017-02-03 12 views
0

원격 웹 사이트에서 PHP 스크립트를 통해 자신을 인증해야하며 웹 사이트에서는 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; 
} 

는이 웹 사이트에서 주제를 많이 탐색하고 권장되는 방법은 (다른 하나가 있다면 알려주세요) 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을 다음과 같은 보는 내 코드 수정 : 그래서,이 솔루션은 몇 시간 전에 게시했습니다

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

그러나

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

을,이 오류가 발생합니다 이 시간 동안 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의 한 가지 요구 사항은 e가 φ (n) 또는 φ (n)에 상응한다는 것입니다. 소수이므로 65537은 매우 자주 발생합니다. 10001은 소수가 아닙니다. 그것은 73 * 137로 분해 될 수 있습니다.