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 协议》,转载必须注明作者和本文链接
第一个更像是沟通出了问题,这种编码方式一般称作为:
Base64 URL
或者URL Safe Base64
,跟语言没多大关系。试试这个 问答:java的加签用php如何实现
可以看看这篇文章 www.usheweb.com/417.html