Java 生成的 RSA 公钥在 PHP 无法正确解析问题解决记录

Java 生成的公钥 PHP 解析错误解决方案:

在对接一个注册小程序,需要对参数进行验签,但是对方使用的是Java,记录下在对接过程遇到的坑以及解决方案

$publicKey = "MIIBIjANBgkqhkiG9w0BAQExxxxxxxxxxxxxxxxxKCAQEAoKFfxC1TNpWlwvdwABbC0OmGouaDOXP9vKkUga4hDT8QdNOoaaiDkAvMtym-M_ro0X7TvwakDh2exELjFhnjvgd1aQ0ePdB6RSRWspDiL5BF0ACyKaRtGI034QgFmWfwpfKdDIwy0mGZqMF3Qwkge7Zj_IP7yXr3vzgwUqO7ex2hU1vXtRC5JNAiFhWqQeIbTyMKvYgg3eNIWTd0ZyW4tXfKR9fSesIxSYGP6xAuvbCy3R0qp0Nwq1XQaDQSoMB3IqhjU6FGbrjEG8J3Yxowat8B2VGIsJUj8xTr5tlBqT0QJs2vcC2ZfZzr_yexyKk_KJYMVSiSRSoLe8rtC7X2aQIDAQAB"; // 对方提供的公钥
openssl_get_publickey($publicKey) // 返回了 false

第一个问题:

需要对公钥进行处理直接上代码,就是这个坑卡了我好久

// 包括 java 通过 RSA 加密后给你的参数都需要进行替换
$publicKey = str_replace('_', '/', str_replace('-', '+', $publicKey));
// 不然就会一直 false
openssl_get_publickey($publicKey);

第二个问题:

由于Java生成的公钥默认不携带

-----BEGIN PUBLIC KEY----------END PUBLIC KEY-----

php是需要携带的所以就要拼接成下面这种格式

-----BEGIN PUBLIC KEY-----
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
********
-----END PUBLIC KEY-----

每64个字符为一行,注意换行问题,接下来就可以正常验签了
希望可以帮助你们!

本作品采用《CC 协议》,转载必须注明作者和本文链接
Web 开发者,Laravel 脑残粉,喜欢挑战探索新的东西,更喜欢完成一件有意义的事情之后的成就感!
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 5

第一个更像是沟通出了问题,这种编码方式一般称作为:Base64 URL 或者 URL Safe Base64 ,跟语言没多大关系。

1年前 评论
Hollie (楼主) 1年前
抄你码科技有限公司
1年前 评论
Hollie (楼主) 1年前

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