RSA2是啥?PHP-RSA2签名验证怎么实现?
什么是RSA2?
RSA2是在原来SHA1WithRSA签名算法的基础上,新增了支持SHA256WithRSA的签名算法。
该算法在摘要算法上比SHA1WithRSA有更强的安全能力。
SHA1WithRSA的签名算法会继续提供支持,但为了您的应用安全,强烈建议使用SHA256WithRSA的签名算法。
开发平台算法名称 | 标准签名算法名称 | 备注 |
---|---|---|
RSA2 | SHA256WithRSA | (强烈推荐使用),强制要求RSA密钥的长度至少为2048 |
RSA | SHA1WithRSA | 对RSA密钥的长度不限制,推荐使用2048位以上 |
那些公司在使用?
一些大型公司的开发平台,比如支付宝、新浪微博。
创建私钥、公钥
//生成原始 RSA私钥文件
openssl genrsa -out rsa_private_key.pem 1024
//将原始 RSA私钥转换为 pkcs8格式
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem
//生成RSA公钥
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
//我们将私钥rsa_private_key.pem用在服务器端,公钥发放给android跟ios等前端。
PHP-RSA2签名验证
class Rsa2 { private static $PRIVATE_KEY = 'rsa_private_key.pem 内容'; private static $PUBLIC_KEY = 'rsa_public_key.pem 内容'; /** * 获取私钥 * @return bool|resource */ private static function getPrivateKey() { $privKey = self::$PRIVATE_KEY; return openssl_pkey_get_private($privKey); } /** * 获取公钥 * @return bool|resource */ private static function getPublicKey() { $publicKey = self::$PUBLIC_KEY; return openssl_pkey_get_public($publicKey); } /** * 创建签名 * @param string $data 数据 * @return null|string */ public function createSign($data = '') { if (!is_string($data)) { return null; } return openssl_sign( $data, $sign, self::getPrivateKey(), OPENSSL_ALGO_SHA256 ) ? base64_encode($sign) : null; } /** * 验证签名 * @param string $data 数据 * @param string $sign 签名 * @return bool */ public function verifySign($data = '', $sign = '') { if (!is_string($sign) || !is_string($sign)) { return false; } return (bool)openssl_verify( $data, base64_decode($sign), self::getPublicKey(), OPENSSL_ALGO_SHA256 ); } }
PHP 调用
require_once "Rsa2.php"; $rsa2 = new Rsa2(); $data = 'my data'; //待签名字符串 $strSign = $rsa2->createSign($data); //生成签名 var_dump($strSign); $is_ok = $rsa2->verifySign($data, $sign); //验证签名 var_dump($is_ok);
推荐学习:《PHP视频教程》
相关阅读 更多
-
nrg是什么格式文件?nrg文件用什么打开? 时间:2025-09-10
-
JavaScript中removeChild删除所有子节点方法详解(附代码) 时间:2025-09-10
-
Java运行时异常(RuntimeException)的原因及解决办法 时间:2025-09-10
-
PHP中随机数生成的方法有哪些(生成随机数的函数) 时间:2025-09-10
-
Java ExceptionInInitializerError异常的原因及对应解决办法 时间:2025-09-10
-
Linux常用命令awk的用法 grep、awk、sed三者的区别 时间:2025-09-09
今日更新
-
铜锣烧是什么梗?揭秘这款美食如何爆火网络成为年轻人新宠!
阅读:18
-
童年的梗是什么梗?揭秘80、90后集体回忆杀,一秒带你重回快乐时光!
阅读:18
-
童年梗是什么梗?揭秘网络怀旧热潮背后原因,带你重温经典回忆杀!
阅读:18
-
童年时候的梗是什么梗?揭秘那些年让你笑到肚疼的经典回忆!
阅读:18
-
童七七是什么梗揭秘:全网爆火的可爱暗号,00后都在用的社交新潮流!
阅读:18
-
童真是什么梗?揭秘网络热词背后的纯真与幽默,一秒get快乐源泉!
阅读:18
-
瞳孔地震是什么梗?揭秘网络热词背后的爆笑瞬间!
阅读:18
-
统一六国的梗是什么梗?揭秘秦始皇爆笑网络热梗背后的真相!
阅读:18
-
捅西瓜梗是网络流行语,源自搞笑视频中夸张捅西瓜动作,暗指用极端方式解决问题,幽默又带讽刺意味。
阅读:18
-
怪兽八号手游核爆配队详解-适用所有主C
阅读:18