后端与安卓和苹果客户端通信 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 话费感谢(出于内心的对知识的敬重!)

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 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年前 评论

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