phpseclib有时只给出整数太大的错误

时间:2015-01-13 16:24:07

标签: php encryption rsa phpseclib

我正在为Android和iOS开发相同的应用。这两个应用程序都发布到PHP服务器,使用RSA公钥 - 私钥加密来加密参数。

我使用phpseclib解密任何应用发送的请求,直到现在它一直运行良好。通常,移动应用程序将仅发布一个名为data的参数,其中包含使用公钥加密的JSON,然后,在服务器中,我使用私钥解密数据参数以获取JSON数据。

但是,对于一个特定服务,我需要发送两个加密参数,通常是加密的JSON,以及使用相同公钥加密的密码。这是我无法弄清楚正在发生什么的地方。有一半的时间,两个参数都没有问题,并且解密后返回正确的值,但剩下的时间,我没有得到致命的错误,但是RSA库引发的一个用户错误说明&#34 ; 整数太大"。这会返回一个空字符串。第一个参数"数据"总是不同的,因为它每次都被加密,但密码参数(也是加密的)总是相同的,这是只有一半时间未加密的参数。

这真的很奇怪,因为有时它会起作用。更奇怪的是,我刚刚尝试过,我颠倒了参数未加密的顺序,首先是密码然后是数据,你知道什么,没有更多的错误!

这是我用来解密的类:

<?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);
        }
    }

}

?>

这是处理POST请求并使用类的代码:

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

顺便说一句,我使用Slim Framework设置路径并为后端提供一点结构。 感谢您提供给我的任何帮助,因为我现在可以将解密顺序反转,因为它似乎有效,但谁知道这是否会给我带来麻烦。

0 个答案:

没有答案