php 验证rsa公钥和私钥是否正确
- <?php
- /**
- * RSA加密
- *
- * @param string $data 待加密数据
- * @param string $publicKey 公钥
- * @return string|false 加密结果
- * @author SC
- */
- function rsaEncrypt($data, $publicKey)
- {
- $ciphertext = '';
- $publicKey = openssl_pkey_get_public($publicKey);
- $data = str_split($data, 117); // 加密的数据长度限制为比密钥长度少11位,如128位的密钥最多加密的数据长度为117
- foreach ($data as $d) {
- openssl_public_encrypt($d, $crypted, $publicKey); // OPENSSL_PKCS1_PADDING
- $ciphertext .= $crypted;
- }
- openssl_free_key($publicKey);
- return base64_encode($ciphertext);
- }
- /**
- * RSA解密
- *
- * @param string $data 待解密数据
- * @param string $privateKey 私钥
- * @param string 解密结果
- * @author SC
- */
- function rsaDecrypt($data, $privateKey)
- {
- $plaintext = '';
- $privateKey = openssl_pkey_get_private($privateKey);
- $data = base64_decode($data);
- $data = str_split($data, 128);
- foreach ($data as $d) {
- $r = openssl_private_decrypt($d, $decrypted, $privateKey);
- $plaintext .= $decrypted;
- }
- return $plaintext;
- }
- /**
- * 生成RSA签名
- *
- * @param string $data 待签名数据
- * @param string $privateKey 私钥
- * @return string 签名
- * @author SC
- */
- function rsaSign($data, $privateKey)
- {
- $privateKey = openssl_get_privatekey($privateKey);
- openssl_sign($data, $sign, $privateKey, OPENSSL_ALGO_MD5); // OPENSSL_ALGO_MD5 or OPENSSL_ALGO_SHA1(default)
- openssl_free_key($privateKey);
- return base64_encode($sign);
- }
- /**
- * 检验RSA签名
- *
- * @param string $data 待签名数据
- * @param string $sign 待验证签名
- * @param string $publicKey 公钥
- * @return bool 检验结果
- * @author SC
- */
- function rsaVerify($data, $sign, $publicKey)
- {
- $publicKey = openssl_get_publickey($publicKey);
- $result = openssl_verify($data, base64_decode($sign), $publicKey, OPENSSL_ALGO_MD5); // OPENSSL_ALGO_MD5 or OPENSSL_ALGO_SHA1(default)
- openssl_free_key($publicKey);
- return ($result == 1) ? true : false; // -1:错误;0:签名错误;1:签名正确
- }
- $pubKey = '-----BEGIN PUBLIC KEY-----
- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCsvvkZ0EYjDcmYsRbcdEugUybF
- YGM3WKZfmZQaU+jHIk0UTw2I9kDHC2wmYcIAA3fqCeJ71WvdiqJNXByUYgsKGuLC
- SYUP9wqOGze0U9hNb/M8E1JHlKbo3v0oAsp8awXl7QDRsOhibJUjIdf3Gt/qwh1R
- mAtYSWHi/BLfzC6nfQIDAQAB
- -----END PUBLIC KEY-----';
- $a = rsaEncrypt(123, $pubKey);
- $priKey = '-----BEGIN PRIVATE KEY-----
- MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAKy++RnQRiMNyZix
- Ftx0S6BTJsVgYzdYpl+ZlBpT6MciTRRPDYj2QMcLbCZhwgADd+oJ4nvVa92Kok1c
- HJRiCwoa4sJJhQ/3Co4bN7RT2E1v8zwTUkeUpuje/SgCynxrBeXtANGw6GJslSMh
- 1/ca3+rCHVGYC1hJYeL8Et/MLqd9AgMBAAECgYBJvO9KJIx71BvU0OsISaAqnLP1
- FtLjQjUqo70DjAPWVP8AB0qoxy0ZifetXpdYOCLMxVFnOM/lbpMfYI1WjY9WGmDQ
- C0UMpOEuk/bhqAJMIN79WpEqWvJQYFzRWw3O63SwbU3mcYgqssULk6VXhhTuCuNI
- gc9D/xNyj3CsfKLgRQJBANNsErsLNeM07lOaeTRXC+OYZmz9TOIgXRliYH+r52rF
- QTYGY6zfs1SgDPIZZZ+1nCA6ifkFlm4xnhptlWTZTzsCQQDRK0cGCt52Iusu0LV9
- 2jiY1fNP8QX4bJThT+iAuGuSZeOgzWQE1Wic6j1Rsgn6XELwY7kpZbLKXWoXLVJC
- 9GinAkA1J53J8vaYai1lTZgdhakSjrVpv4F99L8Ta71xO+oR2QgdKhwTUabHpvm6
- QJJhRgq7u5wGxNXeXJEwec6urUgTAkAstHo2kWYgi7AGTncr0dMc30VkhZgIE3Ty
- fvirYj8jiAFRofRJkC8OsoWui0XUq5lm9XlinqjK1ZJSJ86YHtKrAkBnB6+fO1/h
- j1Jm7L5miQVDYE4VRlVK/oAWTlceVn7a6HUQOTQUlHAiKGxuhzB7jIyLoQWLXHyG
- vpZ0T54nyQqu
- -----END PRIVATE KEY-----';
- $b = rsaDecrypt($a, $priKey);
- echo $b;
- $c = rsaSign(333, $priKey);
- // echo $c;
- echo '<pr>';
- var_dump(rsaVerify(333, $c, $pubKey));
php 验证rsa公钥和私钥是否正确的更多相关文章
- rsa公钥和私钥到底哪个才是用来加密,哪个用来解密?
本文转自:91博客:原文地址:http://www.9191boke.com/138589019.html 公钥和私钥在一些银行系统.第三方支付系统SDK中经常会遇到,刚接触公钥私钥的朋友们估计很难区 ...
- c#生成rsa公钥和私钥
c#生成rsa公钥和私钥的类库,包括加密解密,可以用在网站和winform项目 源码地址: http://download.csdn.net/detail/jine515073/8383809
- Windows 下使用OpenSSL生成RSA公钥和私钥
Windows 下使用OpenSSL生成RSA公钥和私钥 (1)下载OpenSSL 可到该地址下载OpenSSL: https://www.openssl.org/source/(https://ww ...
- RSA公钥,私钥和数字签名通用理解
一.公钥加密 假设一下,我找了两个数字,一个是1,一个是2.我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥. 我有一个文件,不能让别人看,我就用1加密了.别人找到了这个 ...
- 如何使用openssl生成RSA公钥和私钥对
在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互 ...
- 把Java生成的RSA公钥、私钥转换成.NET使用的XML格式
import java.security.KeyFactory; import java.security.interfaces.RSAPrivateCrtKey; import java.secur ...
- 在Linux下如何使用openssl生成RSA公钥和私钥对
在<Java实现RSA密钥对并在加解密.加签验签中应用的实例>中,我们有用Java代码生成RSA密钥对,其实在Linux操作系统中,用openssl也是很容易生成密钥对的. 一.如果在ub ...
- openssl生成RSA公钥和私钥对
在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互界面 ...
- 使用openssl生成RSA公钥和私钥对
在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互界面 ...
随机推荐
- LINUX系统的常用知识
常用的命令: man config 查看linux里面所有命令的详细描述 man pwd 按回车是一行一行的走,按空格是一页一页的走,按q键是退出的意思 mkdir test 创建文件夹p ...
- LightOJ - 1170 - Counting Perfect BST(卡特兰数)
链接: https://vjudge.net/problem/LightOJ-1170 题意: BST is the acronym for Binary Search Tree. A BST is ...
- log4j+junit+maven
本文在开发第一个maven示例的基础上进行扩展. 日志级别测试 在src\main\resources文件夹下新建log4j.properties log4j.rootLogger = warn,st ...
- Oracle substr() 字符截取函数
1.substr函数格式 (俗称:字符截取函数) 格式1: substr(string string, int a, int b); 格式2:substr(string string, int a ...
- linux学习5 Linux开篇入门和基本操作
一.完整的操作系统 1.GNU系统:表示GNU is Not Unix.表示不做商业化.制定了GPL(General Public License)即任何软件程序只要遵循GPL协议就是自由软件.还制定 ...
- centos7.3 安装 mysql-5.7.13
系统环境: [root@localhost ~]# cat /etc/RedHat-release CentOS release 6.7 (Final)[root@localhost tools]# ...
- HTML5自定义属性操作
一.自定义属性(html5标准)data-属性名称="属性值" 自定义属性的名称驼峰式命名规则需要用-隔开 自定义属性名称如果连在一起写,大写会自动转为小写 data-user=& ...
- 常见的 eslint 基本报错信息
Missing semicolon 缺少分号 Missing space before opening brace 左大括号前缺少空格 Trailing spaces not allowed 不允许尾 ...
- 前端项目, 每次运行都需要输入 sudo 的解决方法
前端项目, 每次运行都需要输入 sudo 的解决方法 node一直提示的sudo问题根本原因为: node 的所有者, 项目的所有者, 不同; 解决方法为: 将项目的所有者更改为 chown -R ` ...
- segfault at 0 ip sp error 14
error 14从未见过.谁能帮我解答什么情况才会出现这个,而且怎么定位崩溃函数地址? 备忘: segfault at 引起故障的地址ip 指令的内存地址sp 堆栈指针地址, 及栈顶指针err is ...