phpseclib有时给出的整数错误太大
我正在为Android和iOS开发相同的应用程序。这两个应用程序都使用RSA公钥-私钥加密将参数发送到PHP服务器 我用它来解密任何应用程序发送的请求,到目前为止,它一直工作得很好。通常,移动应用程序只发布一个名为data的参数,其中包含一个用公钥加密的JSON,然后在服务器中,我使用私钥解密数据参数以获得JSON数据 但是,对于一个特定的服务,我需要发送两个加密参数,通常的加密JSON,以及一个同样使用相同公钥加密的密码。这就是我不知道发生了什么的地方。有一半的时间,这两个参数都被毫无问题地接收并解密,返回正确的值,但剩下的时间,我没有收到致命错误,而是RSA库在php中抛出一个用户_错误,说“整数太大”。这将返回一个空字符串。第一个参数“data”总是不同的,因为它每次都被加密,但是密码参数(也被加密)总是相同的,而这个参数只有一半的时间没有被加密 这真的很奇怪,因为有时候它会起作用。更奇怪的是,我刚刚尝试了,我颠倒了参数未加密的顺序,首先是密码,然后是数据,你知道吗,没有更多的错误 这是我用来解密的类:phpseclib有时给出的整数错误太大,php,encryption,rsa,phpseclib,Php,Encryption,Rsa,Phpseclib,我正在为Android和iOS开发相同的应用程序。这两个应用程序都使用RSA公钥-私钥加密将参数发送到PHP服务器 我用它来解密任何应用程序发送的请求,到目前为止,它一直工作得很好。通常,移动应用程序只发布一个名为data的参数,其中包含一个用公钥加密的JSON,然后在服务器中,我使用私钥解密数据参数以获得JSON数据 但是,对于一个特定的服务,我需要发送两个加密参数,通常的加密JSON,以及一个同样使用相同公钥加密的密码。这就是我不知道发生了什么的地方。有一半的时间,这两个参数都被毫无问题地接
<?php
set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/../libs/Crypt');
require_once dirname(__FILE__) .'/../libs/Crypt/Net/SSH2.php';
require_once dirname(__FILE__) . '/../libs/Crypt/Crypt/RSA.php';
class CryptoHandler {
private $privateKey;
function __construct() {
// Load Private Key File
$this->privateKey = file_get_contents('resources/private_key.pem',FILE_USE_INCLUDE_PATH);
}
function decrypt($encryptedString) {
$rsa = new Crypt_RSA();
$rsa->setPassword('password');
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$rsa->loadKey($this->privateKey);
$decryptedString = $rsa->decrypt(base64_decode($encryptedString));
if (isset($decryptedString) && strlen($decryptedString) > 0){
return $decryptedString;
}
else{
//This is the exception I get, because $decryptedString's length is 0
//And also, the integer too large message
throw new Exception(INVALID_ENCRYPTED_DATA);
}
}
}
?>
顺便说一下,我正在使用设置路径,并为后端提供一点结构。
感谢您能为我提供的任何帮助,因为现在我将颠倒解密顺序,因为它似乎有效,但谁知道这是否会在将来给我带来麻烦。对我来说效果很好:我可以切换$password和$parsedRequest,没有问题。如果您遇到问题,可以发布可以重现问题的独立代码。ie.提供重现问题的密钥以及$data和$encryptedPassword的值。感谢您的反馈。遗憾的是,发布重现问题的代码有点困难,因为我使用公钥从Android或iOS应用程序发出post请求。因此,涉及到很多代码。但最奇怪的是,如果我将加密数据记录到一个文本文件中,然后复制文本并将其用作字符串,代码每次都可以正常工作。所以,我不知道会是什么。我的猜测是分配内存或类似的问题,因为这只在我连续两次使用decrypt函数时发生
$data = $app->request->post('data');
$encryptedPassword = $app->request->post('password');
try{
$chdl = new CryptoHandler();
$parsedRequest = $chdl->decrypt($data);//invert this and the next line and it works
$password = $chdl->decrypt($encryptedPassword);//$encryptedPassword is always the same
}catch(Exception $e){
die($e->getMessage());
}