其实有时候觉得写博客好烦,就个函数就开篇博客。很小的意见事情而已,知道的人看来多取一举,或者说没什么必要,浪费时间,不知道的人就会很郁闷。技术就是这样的,懂的人觉得真的很简单啊,不知道的人真的好难。。。
2018-11-26 12:10更新
**一般在跟第三方接口对接数据的时候,为了保证很多都使用的RSA签名,没性趣了解的同学只需要知道原理的同学,主需要知道“RSA非对称加/解密算法中最流行最牛逼的然后知道怎么使用它就足够了” **
重点内容
如果下面的链接没有被翔的话可以直接飞机过去,关于RSA加密算法的原理有兴趣的同学可以搜索“阮一峰”的博客

RSA加密算法原理一
RSA加密算法原理二

private static function sign($data){$pk = self::$private_key;openssl_sign($data, $sign, $pk);$sign = base64_encode($sign);return $sign;}

咋一看KaTeX parse error: Expected 'EOF', got '#' at position 42: …函数有点不一样,捂脸.... #̲语法是这样的: **opens…data, s i g n , sign, sign,pk); 传入了 d a t a 数 据 o p e n s s l s i g n ( ) 对 data数据 openssl_sign()对 data数据openssls​ign()对data进行签名,用的是静态变量 p r i v a t e k e y , 签 名 完 成 后 返 回 了 private_key,签名完成后返回了 privatek​ey,签名完成后返回了sign 作为签名结果,然后再base64_encode() 进行二进制编码,然后返回编码过后的签名**

<?php
$private_key = '-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA346nvWRmWhmdpHSsai6aUfDg9SehCUsDmBNji8OXmiQJmkBO
ssN/cu3Ifap7P6sgENzZbh/SYB/+i3JeBGlQetFt+kjJQnr1lDUQlSWBBq6OyxGT
LYDw3NyFsV1BN/NdQ06HzT1k/J0AZChyLMpMR8HUWZE6stbnocdY9aDXXAILyRa6
tJ6WUwepfMUFZfQAxWkpNLVXzY+QTf95ACblqVRoqRbVNNL4AOT1FYmQyIrD9gUI
wMQaUJ+2fGJtT9m1rbLpj87BddKKw5T7TOwqwDJrEgrHQ5m3YmphAEIrM6ZreV2C
FlT4RI8kvFfivqo/TvuTO4rMITzCwvxK6+dzuwIDAQABAoIBAQCRaFVcT6hvJEgw
Bp96dRN1BqsbagpJZBxTVxEhgDfkT1pblUZa6ePE2jrU2gVOVT0HGs7l3RbV5RmI
k/vo/KMXL49MAvm9HwMKwjUl/X3d3b4NAUJsj3ia/2iKA7D+9nEL7VFRQoSj9m6h
ttkEnxRcfAtlspuuZS/GP0ZyhYpuUcMoyCXEGknvp+xCrbWPSwjZR4qrd/c5XP2H
aRn+3ZaKiZOnVR765zN+DOOBvD+AuHT0bHxg9dceir5U+cTWNQ9mopR4+lsjcxIF
BjzOFsx6nxz53Si0Lz+nKVtnUKRRTYbiXnVra3MuSVheu1MYLXDY/fGQIv0o1U8G
2s2if7NRAoGBAPBhczAwi5slugweFBvn5QC/tumvn49+A9r4eugcglDrXPbBhbcT
gzGwTogS8rT8BosowY6d4QI7sajdRtG0+Lga/plILIjif8ksJPGTnkRVFmilJN25
QSmdcU8iX60AJCpz4t6wk2rLeFfyXh+Pdi7j6/ipn9XgoW+cbODSIm7TAoGBAO4V
XEmcsNHVuX/g/QaBYEjo/kXqbnZ28/1sNAEwFZ8mI4NEah8e80lLiNyjXcGN/6UC
2UgTukkghwpKRDBNqmuOHb85Ps3Kl2WwAs2vHwdyUxbO9+z0nXBVZrE7nRUoatxy
T2fEzqWu3zVVbVdHcE5VSr5SHHbTtGYiH4P3A2Z5AoGAUBHF0rl45zcL39ltDVaT
G0rA3NpZJeztz9SQ7BwC9H1RvAf+SFtBih2WKxFUsyB39Yaf4qeIObw0k3ERk+za
JEkpoVk/LGF1+0avD6ECSPSmwDiyLQD2Saxd/+QNRo0TfuiXG2Jp2FrqPTFIVO7u
iPP2uB+YVB+85naOddzJB20CgYEAodpBoAV2q1/5OHcybB693zMN0Wf66mwZmLnb
bMdMm6Ho2I9E+Z0n1TcVdrFUxoWLOpmCLx7CMH59b0BntNLHvVCi5mG7UVmdrNKI
RV384SoWVFYlc6Aj+78DDg+xzTVp2C2Zz7iap0YHlhFaQNBfB9Gx+0qE8T8gz6H4
/NSLKjkCgYBHjrlArjQufEwC2Evz+aMpB6Ie//P7OKXVTHQZUkv5bWKCBgYbukb1
ErpDGUZqjRY0uJ3NUspcdIAYFu7vqHk7/epT1Ev6qGb6v9tkM7iudtS7LBtsfSjx
Z8G0msgfQDur9pyEVb9L3Im5K5TrzUiDZt0s1eok6WrwpiLOjNMoEw==
-----END RSA PRIVATE KEY-----';  $public_key = '-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA346nvWRmWhmdpHSsai6a
UfDg9SehCUsDmBNji8OXmiQJmkBOssN/cu3Ifap7P6sgENzZbh/SYB/+i3JeBGlQ
etFt+kjJQnr1lDUQlSWBBq6OyxGTLYDw3NyFsV1BN/NdQ06HzT1k/J0AZChyLMpM
R8HUWZE6stbnocdY9aDXXAILyRa6tJ6WUwepfMUFZfQAxWkpNLVXzY+QTf95ACbl
qVRoqRbVNNL4AOT1FYmQyIrD9gUIwMQaUJ+2fGJtT9m1rbLpj87BddKKw5T7TOwq
wDJrEgrHQ5m3YmphAEIrM6ZreV2CFlT4RI8kvFfivqo/TvuTO4rMITzCwvxK6+dz
uwIDAQAB
-----END PUBLIC KEY-----';//echo $private_key;
$pi_key =  openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
$pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的
echo $pi_key;echo "<hr>";
echo $pu_key;echo "<hr>";  $data = "<h3>你忙吧,我吃柠檬!</h3>";//原始数据
$encrypted = "";
$decrypted = "";
echo "---------------------------------------","私钥加密,用公钥解密:","---------------------------------------";
echo "source data:",$data,"\n";
echo "<hr>";
echo "加密内容:";
openssl_private_encrypt($data,$encrypted,$pi_key);//私钥加密
$encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
echo $encrypted,"\n";
echo "<hr>";echo "解密开始:";
openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私钥加密的内容通过公钥可用解密出来
echo $decrypted,"\n";  echo "---------------------------------------","公钥加密,用私钥解密:","---------------------------------------"."<br>";
openssl_public_encrypt($data,$encrypted,$pu_key);//公钥加密
$encrypted = base64_encode($encrypted);
echo '加密内容:',$encrypted;
echo "<hr>";
echo "解密内容:";
openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//私钥解密
echo $decrypted,"\n";  #---------------------------------------封装成函数-------------------------------
/*** 私钥加密,传递私钥和需要加密的数据过来 written:yangxingyi Date:2018-11-26*/
function RsaEncrypt($str,$private_key){$pi_key =  openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id  if(!$pi_key) return'私钥有误';openssl_private_encrypt($str,$encrypted,$pi_key);//私钥加密 $encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的return $encrypted;
}
/*** 公钥解密,传递公钥和需要已加密的字符串过来 written:yangxingyi Date:2018-11-26*/
function RsaDecrypt($str,$public_key){$pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的  if(!$pu_key) return '公钥有误';openssl_public_decrypt(base64_decode($str),$decrypted,$pu_key);//私钥加密的内容通过公钥可用解密出来  return $decrypted;
}$rs1 = RsaEncrypt('小姐姐你好啊!',$private_key);
var_dump($rs1);$rs2 = RsaDecrypt($rs1,$public_key);
var_dump($rs2);

如果你看到图片这样的输出,就没毛病了,说明你的公钥和私钥是一对的


#介绍下钥匙生成(win下):openssl钥匙生成工具点击下载

下载文件后解压,我这里放在D:\openssl目录下

打开cmd控制台 ,就是cmd进入黑窗口啦,哈哈哈…
执行命令下面命令
d:
cd openssl/bin

先生成私钥,参数1024/2048可选择rsa_private_key.pem 这个是生成的文件名,可以自定义,建议不要有中文
执行:openssl genrsa -out rsa_private_key.pem  2048 #再根据私钥生成公钥文件
执行:openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

然后就躺着一对密匙了:

然后编译器可以打开它,不推荐记事本打开
定义变量

$PRIVATE_KEY = '-----BEGIN RSA PRIVATE KEY-----
************************
************************
************************
-----END RSA PRIVATE KEY-----';温馨提示:开始和结束的标签都要保留的哦,不要扔掉咯!!!!!!!!!
觉得有用就搬走吧,不用联系我的!!!!

openssl_sign() 语法+RSA公私钥加密解密,非对称加密算法详解相关推荐

  1. RSA公私钥加解密方式-工具类

    直接上代码 ​ import java.io.ByteArrayOutputStream; import java.math.BigInteger; import java.security.*; i ...

  2. PKCS1 PKCS8 公私钥 加密解密过程

    公钥:一样 私钥:不一样(PKCS8是PKCS1通过一定的保护措施转化而来,也就是说PKCS1是裸奔的,PKCS8是穿衣服的) 加密解密过程:一样(padding方式跟格式无关,只需要保证加密的pad ...

  3. python des解密_python实现DES加密解密方法实例详解

    本文实例讲述了python实现DES加密解密方法.分享给大家供大家参考.具体分析如下: 实现功能:加密中文等字符串 密钥与明文可以不等长 这里只贴代码,加密过程可以自己百度,此处python代码没有优 ...

  4. RSA公私钥加密加签顺序

    RSA是一种非对称加密的机制,是一对密钥对(公钥和私钥). 一.加密: 1.公钥加密,私钥解密.可以多人持有公钥进行数据加密,仅一人持有私钥进行数据解密: 2.可以确保数据传输的安全性. 二.加签: ...

  5. Java(111):非对称加密RSA的使用(openssl生成RSA公私钥对)

    Java(111):非对称加密RSA的使用(openssl生成RSA公私钥对) 1.openssl生成RSA公私钥对 [root@loaclhost ~]# openssl version OpenS ...

  6. java中使用openssl生成的rsa公私钥进行数据加解密_使用openssl生成RSA公钥和私钥对...

    在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互界面 ...

  7. Python crypto模块实现RSA和AES加密解密

    Python crypto模块实现RSA和AES加密解密 Python的crypto是用于RSA加密解密,AES加密解密的. 一.RSA和AES简介 RSA加密算法是一种非对称加密算法.RSA 是19 ...

  8. RSA算法与加密解密

    RSA算法与加密解密 什么是RSA算法(RSA algorithm) 什么是非对称加密算法 RSA加密解密原理 算法攻击和蓝桥杯2018年省赛题目 RSA的小指数攻击 蓝桥杯2018年省赛题目 第一步 ...

  9. RSA公私钥格式分析及其在Java和Openssl之间的转换方法

    文章目录 PKCS#1和PKCS#8 X.509公钥证书 ASN.1抽象语法标记 DER和PEM编码 OID对象标识符 用openssl命令生成PKCS1#格式的RSA密钥对 生成私钥 从私钥中导出公 ...

最新文章

  1. linux shell 脚本入门
  2. Ubuntu麒麟下搭建FTP服务
  3. LeetCode 2116. 判断一个括号字符串是否有效(栈)
  4. 需求获取的三阶段:需求背景、需求调研、需求分析 (2)
  5. 如何使用IIS重写模块将HTTP重定向到HTTPS
  6. python数字组合算法_python - 简单算法题 - 求三位数组合
  7. 【java笔记】File类(2):获取,判断,创建,删除,遍历目录方法
  8. 1分钟获取上千ID,暴力破解、端口扫描、拖库攻击如何防范
  9. 一些值得学习的Unity教程
  10. 国外java、IT技术网站汇总
  11. 618买什么运动装备、最值得入手的运动装备合集
  12. uni-app 报错getUserProfile:fail can only be invoked by user TAP gesture.
  13. Win7电池电量设置
  14. Android TextView带背景图片和自定义边框
  15. NIO与Netty编程(三)之Netty编程
  16. jni使用(四)-----IDEA中javah生成.h文件
  17. 【C4-AI大赛】2021优秀作品荟
  18. 【文章】我在华为打工的日子
  19. scope may not be empty [scope-empty]
  20. unity 中 c# 与 object-c 交互

热门文章

  1. truetype字体怎么转换成普通字体_TrueType字体作用|如何在文档嵌入 TrueType 字体中...
  2. 基于来信码的短信通知平台
  3. 顶级“黑客”能厉害到什么地步?无信号也能上网,专家:高端操作!
  4. 电源硬件设计----升降压变换器(负压输出)基础
  5. 报告老板,我们的H5页面在iOS11系统上白屏了!
  6. 【CuteJavaScript】GraphQL真香入门教程
  7. 浅谈自适应滤波器---(快速RLS算法)
  8. phpmyadmin 4.8.1 Remote File Inclusion Vulnerability (CVE-2018-12613)漏洞复现
  9. AWS助力海信集团智慧家居全球化运营
  10. 前端CSS样式去除body默认边距和a标签下划线去除和高亮显示问题