后端与安卓和苹果客户端通信 AES 加解密兼容问题?

最近做接口开发,有个与客户端安全交互数据问题,大家想到办法是,aes 与 rsa 相结合加密来传输数据。具体流程为,aes 加密原始数据,rsa 加密 aes key ,将 rsa 公钥放在客户端,私钥放在服务端。但现在有个问题,就是在进行 AES/CBC加密的时候,客户端支持的填充是 PCKS7 padding 填充模式,但 php (openssl_encrypt)函数却不支持该填充模式。而且查了谷歌和文档发现,能实现 PCKS7 padding 填充模式的 mcrypt 库都在 7.1 都已经移除了。
所以想请问一下,1.现在有什么办法可以实现 AES/CBC 加密 PCKS7 padding 填充模式呢?如果用 mcrypt 的库的话,自行实现 PCKS7 padding 的话,如果实现呢(我看有的填充是 % 16,有的是 % 32啊,很懵....)?求有相关经验的同学帮帮忙,老司机带带路。如能解决或指导一下 30 话费感谢(出于内心的对知识的敬重!)

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 6

怎么处理三种语言的 aes 加解密兼容好啊?

6年前 评论

@夜晚的雨 怎么解决的?

6年前 评论
private function encryPwd($encryString, $encryKey)
    {
        $keyLen   = strlen($encryKey);
        if (null == $encryKey || $keyLen < 8) {
            $encryKey = str_pad($encryKey, 8, '0', STR_PAD_RIGHT);
        }
        if ($keyLen > 8) {
            $encryKey = substr($encryKey, 0, 8);
        }
        $key     = mb_convert_encoding($encryKey, 'UTF-8');
        $message = mb_convert_encoding($encryString, 'UTF-8');
        $encry   = openssl_encrypt($message, 'DES-CBC', $key, OPENSSL_RAW_DATA, $key);

        return base64_encode($encry);
    }

openssl_encrypt 这个现在7 版本弃用了,填充规则为右填充 8位,加密方式为des-cbc , 可以参考一下 iv 这个向量其实写个字符串key 就行

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!