zoukankan      html  css  js  c++  java
  • 关于php中openssl_public_encrypt无填充的一个注意事项

      昨天在使用openssl_public_encrypt函数rsa加密一些数据传输的时候,怎么都是加密失败。

    1         if (openssl_public_encrypt($data, $encrypted, $this->pubkey, OPENSSL_NO_PADDING)){
    2             $data = base64_encode($encrypted);
    3         }else {
    4             $data = '';
    5         }
    6         return $data;

      把填充模式换成默认的话是加密成功的,我百度到的资料都是说加密的数据的长度问题,但我的数据是不定长度,而且对应接口使用的解密方式也固定是OPENSSL_NO_PADDING无填充方式,不能使用默认的填充模式。后面终于让我在Stack Overflow上找到一个相同的问题 https://stackoverflow.com/questions/36001858/php-rsa-encrypt-with-openssl-no-padding-mode-return-false

      最好配合这篇文章blog食用 https://www.cnblogs.com/lzl-sml/p/3501447.html 

      大致说明一下出现问题的原因,不一定完全准确,各位看官大概理解就好,在java(Android)中rsa加密选择无填充模式如果不足128字节的话,调用方法会自动帮你将数据用0(还是空格?)填充至128字节再进行加密,但php跟java中没有统一的填充标准,所以openssl_public_encrypt中并没有帮我们做这一件事情,rsa又对加密数据长度有要求(这个与钥模有关),从而导致加密失败,这就需要我们自己手动去填充了。可以使用php函数str_pad

    $data = str_pad($data, 128);

    默认填充空格,加密后反过来也解密成功了。

  • 相关阅读:
    python SocketServer
    python Socket网络编程 基础
    Kali 2017 使用SSH进行远程登录 设置 ssh 开机自启动
    用 python 的生成器制作数据传输进度条
    Markdown 语法的简要规则
    初学python之 面向对象
    windows和linux打印树状目录结构
    初学python之生成器
    初学 python 之 模拟sql语句实现对员工表格的增删改查
    使用wifite破解路由器密码
  • 原文地址:https://www.cnblogs.com/trustme326/p/9012635.html
Copyright © 2011-2022 走看看