[英]JavaScript RSA encryption to PHP
我需要通过远程网站上的PHP脚本对自己进行身份验证,并且网站对密码使用基于JS的RSA加密。 这是网站上的代码:
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的基本示例,我只会得到一个空白页面。 我在$rsa->loadKey('...');
输入了some_random_string
$rsa->loadKey('...');
-不知道我做对了吗? 但是,在此示例中,我看不到输入strExponent
(即10001)的位置。
因此,我尝试了另一种解决方案- 在PHP中使用RSA加密和解密文本,并修改了代码,使其外观如下:
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库中发生了一些变化,而我不确定如何重新修改我的代码。
RSA密钥的流行格式通常同时包含指数和模数。 例如,请参阅我对RSA加密的数学理解的答案:〜/ .ssh中的文件与理论有何关系? 有关一种特殊类型的密钥格式的详细讨论。
如果您将指数和模数作为不同的值,请尝试执行以下操作:
$rsa->loadKey([
'e' => new Math_BigInteger('10001', 16),
'n' => new Math_BigInteger('some_random_string', 16);
]);
请注意, 16
位。 65537 (十六进制的10001)是常见的RSA指数。 默认情况下, Math_BigInteger
假定要传递给它的数字以10为底,除非您另外特别声明。 RSA的一个要求是e是phi(n)或lcm(n)的互素。 65537是互质的,因为它是质数。 10001不是素数。 它可以分解为73 * 137。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.