• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

php RSA加密解密返回空/false

武飞扬头像
上海菜鸡毛
帮助1

问题

字符串过长,加密/解密时返回false

原因(太底层,我也看不懂)

RSA加解密中必须考虑到的密钥长度、明文长度和密文长度问题。明文长度需要小于密钥长度(1024),而密文长度则等于密钥长度。因此当加密内容长度大于密钥长度时,有效的RSA加解密就需要对内容进行分段。
这是因为,RSA算法本身要求加密内容也就是明文长度m必须0<m<密钥长度n。如果小于这个长度就需要进行padding,因为如果没有padding,就无法确定解密后内容的真实长度,字符串之类的内容问题还不大,以0作为结束符,但对二进制数据就很难,因为不确定后面的0是内容还是内容结束符。而只要用到padding,那么就要占用实际的明文长度,于是实际明文长度需要减去padding字节长度。我们一般使用的padding标准有NoPPadding、OAEPPadding、PKCS1Padding等,其中PKCS#1建议的padding就占用了11个字节。
这样,对于1024长度的密钥。128字节(1024bits)-减去11字节正好是117字节,但对于RSA加密来讲,padding也是参与加密的,所以,依然按照1024bits去理解,但实际的明文只有117字节了。
所以如果要对任意长度的数据进行加密,就需要将数据分段后进行逐一加密,并将结果进行拼接。同样,解码也需要分段解码,并将结果进行拼接。

解决

数据截取后(加密/解密)在拼接为字符串。

  • 私钥加密 <-> 公钥解密
  • 私钥解密 <-> 公钥加密
/**
     * 加密
     * Created by PhpStorm
     * User: Noah
     * Date: 2022/12/13
     * Time: 15:31
     * @param $data
     * @return string
     * @throws ApiExceptions
     */
    public static function enPublic($data)
    {

        $rsa_public = '';

        //公钥加密
        $key = openssl_pkey_get_public($rsa_public);
        $crypted = '';
        foreach (str_split($data, 117) as $chunk) {
            openssl_public_encrypt($chunk, $encryptData, $key);
            $crypted .= $encryptData;
        }
        return base64_encode($crypted);
    }

    /**
     * 解密
     * Created by PhpStorm
     * User: Noah
     * Date: 2022/12/13
     * Time: 15:31
     * @param $data
     * @return mixed
     * @throws ApiExceptions
     */
    public static function dePublic($data)
    {
        $rsa_public = '';
        $private_key = openssl_pkey_get_public($rsa_public);

        $decrypted = '';
        foreach (str_split(base64_decode($data), 128) as $chunk) {
            openssl_public_decrypt($chunk, $decryptData, $private_key);
            $decrypted .= $decryptData;
        }
        return $decrypted;
    }
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfecfc
系列文章
更多 icon
同类精品
更多 icon
继续加载