rsa加密使用过程小结

        对以下一段代码进行测试发现,在不同的php环境下,出现不同的执行效果。

    /*读取公钥文件*/
    $pubKey     = file_get_contents($publicKeyFilePath);
    /*转换为openssl格式密钥*/
    $resource   = openssl_get_publickey($pubKey);
    var_dump($resource)
    openssl_public_encrypt($block, $chrText, $resource);
         在apache2.4.19+php5.6.19或者php7.0.13环境中 运行都正常,但是在apache 2.4.17 + php5.6.15环境中运行出现了以下错误key parameter is not a valid public key,error:0906D06C:PEM routines:PEM_read_bio:no start line这样的错误。打印resource,发现返回的是false。

        经过不断排查,将公钥的单行切换成多行模式,测试通过。结合网上的相关资料,总结如下:

公钥中必须有-----BEGIN PUBLIC KEY----- 和 -----END PUBLIC KEY----- 。公钥必须断行,否则有可能无法读取到正确的公钥。比如使用php的openssl_pkey_get_public无法读取到公钥资源。

     密钥文件最终将数据通过Base64编码进行存储。可以看到上述密钥文件内容每一行的长度都很规律。 之所以要对经过base64的公钥进行断行,这是由于RFC2045中规定:The encoded output stream must be represented in lines of no more than 76 characters each。也就是说Base64编码的数据每行最多不超过76字符,对于超长数据需要按行分割。支付宝公钥是64位分割的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值