daoi php_使用php生成RSA公钥私钥及进行加密解密和签名验证

这篇文章主要介绍使用PHP开发接口,数据实现RSA加密解密后使用,实例分析了PHP自定义RSA类实现加密与解密的技巧,非常具有实用价值,需要的朋友可以参考下。

简单介绍RSA:

RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它。但是有不少新手对它不太了解。下面仅作简要介绍。RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。

下面为具体类:Rsa.class.php

/**

* RSA算法类

* 签名及密文编码:base64字符串/十六进制字符串/二进制字符串流

* 填充方式: PKCS1Padding(加解密)/NOPadding(解密)

*

* Notice:Only accepts a single block. Block size is equal to the RSA key size!

* 如密钥长度为1024 bit,则加密时数据需小于128字节,加上PKCS1Padding本身的11字节信息,所以明文需小于117字节

*/

class RSA

{

private $pubKey = null;

private $priKey = null;

/**

* 构造函数

*/

public function __construct()

{

// 需要开启openssl扩展

if (!extension_loaded("openssl")) {

$this->_error("Please open the openssl extension first.");

}

}

/**

* 读取公钥和私钥

* @param string $public_key_file 公钥文件(验签和加密时传入)

* @param string $private_key_file 私钥文件(签名和解密时传入)

*/

public function init($public_key_file = '', $private_key_file = '')

{

if ($public_key_file) {

$this->_getPublicKey($public_key_file);

}

if ($private_key_file) {

$this->_getPrivateKey($private_key_file);

}

}

/**

* 自定义错误处理

*/

private function _error($msg)

{

die('RSA Error:' . $msg); //TODO

}

/**

* 检测填充类型

* 加密只支持PKCS1_PADDING

* 解密支持PKCS1_PADDING和NO_PADDING

*

* @param int 填充模式

* @param string 加密en/解密de

* @return bool

*/

private function _checkPadding($padding, $type)

{

if ($type == 'en') {

switch ($padding) {

case OPENSSL_PKCS1_PADDING:

$ret = true;

break;

default:

$ret = false;

}

} else {

switch ($padding) {

case OPENSSL_PKCS1_PADDING:

case OPENSSL_NO_PADDING:

$ret = true;

break;

default:

$ret = false;

}

}

return $ret;

}

private function _encode($data, $code)

{

switch (strtolower($code)) {

case 'base64':

$data = base64_encode('' . $data);

break;

case 'hex':

$data = bin2hex($data);

break;

case 'bin':

default:

}

return $data;

}

private function _decode($data, $code)

{

switch (strtolower($code)) {

case 'base64':

$data = base64_decode($data);

break;

case 'hex':

$data = $this->_hex2bin($data);

break;

case 'bin':

default:

}

return $data;

}

private function _getPublicKey($file)

{

$key_content = $this->_readFile($file);

if ($key_content) {

$this->pubKey = openssl_get_publickey($key_content);

}

}

private function _getPrivateKey($file)

{

$key_content = $this->_readFile($file);

if ($key_content) {

$this->priKey = openssl_get_privatekey($key_content);

}

}

private function _readFile($file)

{

$ret = false;

if (!file_exists($file)) {

$this->_error("The file {$file} is not exists");

} else {

$ret = file_get_contents($file);

}

return $ret;

}

private function _hex2bin($hex = false)

{

$ret = $hex !== false && preg_match('/^[0-9a-fA-F]+$/i', $hex) ? pack("H*", $hex) : false;

return $ret;

}

/**

* 生成Rsa公钥和私钥

* @param int $private_key_bits 建议:[512, 1024, 2048, 4096]

* @return array

*/

public function generate(int $private_key_bits = 1024)

{

$rsa = [

"private_key" => "",

"public_key" => ""

];

$config = [

"digest_alg" => "sha512",

"private_key_bits" => $private_key_bits, #此处必须为int类型

"private_key_type" => OPENSSL_KEYTYPE_RSA,

];

//创建公钥和私钥

$res = openssl_pkey_new($config);

//提取私钥

openssl_pkey_export($res, $rsa['private_key']);

//生成公钥

$rsa['public_key'] = openssl_pkey_get_details($res)["key"];

/*Array

(

[bits] => 512

[key] =>

[rsa] =>

[type] => 0

)*/

return $rsa;

}

/**

* 生成签名

*

* @param string 签名材料

* @param string 签名编码(base64/hex/bin)

* @return bool|string 签名值

*/

public function sign($data, $code = 'base64')

{

$ret = false;

if (openssl_sign($data, $ret, $this->priKey)) {

$ret = $this->_encode($ret, $code);

}

return $ret;

}

/**

* 验证签名

*

* @param string 签名材料

* @param string 签名值

* @param string 签名编码(base64/hex/bin)

* @return bool

*/

public function verify($data, $sign, $code = 'base64')

{

$ret = false;

$sign = $this->_decode($sign, $code);

if ($sign !== false) {

switch (openssl_verify($data, $sign, $this->pubKey)) {

case 1:

$ret = true;

break;

case 0:

case -1:

default:

$ret = false;

}

}

return $ret;

}

/**

* 加密

*

* @param string 明文

* @param string 密文编码(base64/hex/bin)

* @param int 填充方式(貌似php有bug,所以目前仅支持OPENSSL_PKCS1_PADDING)

* @return string 密文

*/

public function encrypt($data, $code = 'base64', $padding = OPENSSL_PKCS1_PADDING)

{

$ret = false;

if (!$this->_checkPadding($padding, 'en')) $this->_error('padding error');

if (openssl_public_encrypt($data, $result, $this->pubKey, $padding)) {

$ret = $this->_encode($result, $code);

}

return $ret;

}

/**

* 解密

*

* @param string 密文

* @param string 密文编码(base64/hex/bin)

* @param int 填充方式(OPENSSL_PKCS1_PADDING / OPENSSL_NO_PADDING)

* @param bool 是否翻转明文(When passing Microsoft CryptoAPI-generated RSA cyphertext, revert the bytes in the block)

* @return string 明文

*/

public function decrypt($data, $code = 'base64', $padding = OPENSSL_PKCS1_PADDING, $rev = false)

{

$ret = false;

$data = $this->_decode($data, $code);

if (!$this->_checkPadding($padding, 'de')) $this->_error('padding error');

if ($data !== false) {

if (openssl_private_decrypt($data, $result, $this->priKey, $padding)) {

$ret = $rev ? rtrim(strrev($result), "\0") : '' . $result;

}

}

return $ret;

}

}

RSA类的使用:use.php

if (!class_exists("RSA")) {

require_once "Rsa.class.php";

}

$private_key_file = __DIR__ . "/cert/private_key.pem";

$public_key_file = __DIR__ . "/cert/public_key.pem";

$rsa = new RSA();

// 没有就生成一对

if (!file_exists($private_key_file) || !file_exists($public_key_file)) {

$key = $rsa->generate();

file_put_contents($private_key_file, $key['private_key'], LOCK_EX);

file_put_contents($public_key_file, $key['public_key'], LOCK_EX);

} else {

$key = [

"private_key" => file_get_contents($private_key_file),

"public_key" => file_get_contents($public_key_file)

];

}

//显示数据

echo "private_key:\n" . $key['private_key'] . "\n\r";

echo "public_key:\n" . $key['public_key'] . "\n\r";

//要加密的数据

$data = "Web site:http://blog.kilvn.com";

echo '加密的数据:' . $data, "\n-------------------------------\n";

$rsa->init($public_key_file, $private_key_file);

//加密

$encrypt = $rsa->encrypt($data);

echo "公钥加密后的数据: " . $encrypt . "\n";

//解密

$decrypt = $rsa->decrypt($encrypt);

echo "私钥解密后的数据: " . $decrypt, "\n-------------------------------\n";

//签名

$sign = $rsa->sign($data);

echo "签名的数据: " . $sign . "\n";

//验证

$verify = $rsa->verify($data, $sign);

echo "验证的数据: " . $verify . "\n", "\n-------------------------------\n";

运行结果如下:

/usr/bin/php /Volumes/Mac软件/WEB/www/use.php

private_key:

-----BEGIN PRIVATE KEY-----

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

mpPQ1kaLJ7QoBD/vT74UhxpqUgCma/Q=

-----END PRIVATE KEY-----

public_key:

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

MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwGji+aUGELbI6sa7ifb0

W9QYCp9aMSy0zg5TXV/fDmg/9/hAqjRpTeLThLSxeTNPmzf2VZ9jvrZ7IjkYldfA

2VOe4x91DosU1Fniwf6TYuNemM3H/DK9dGuFXzI1jsiiAobyd5Jb5Ptt0HWLgKNb

jXquh8UddadHgaeKwlbtYYIypb9hhf4ocywQc2dbBBS6e7RpI/XQr+TDkhZPvUYa

4lAaDnPdbc9V75qE/WU9Q2ACiw6jtrcpL1nH5Hif4OHrAHrKLOUyUhUXdkKDFjxN

aZfXxDEUqxLkUw7PXlmww3Rcr3S5MQVP9UXqgHlvOQOYiddXYY81XKA5pXKcWIrA

xjbeUPmVW7UmCFOlYcV/j+rVNDMokQqUragMi+pqpYkzXum7UXB5zjsB8kMVx8l4

/0M5vNk4XGzFCbj4pdsLwxRFW7AVqHqRiGYEEEkl/UpHIl+T+aEZXQI/uAa0q9+R

BoqXVqMqmoYT6R5wPUOliDYchAQUxJkGVow60Y7kVrtIlqPvOG4ugLLpKRTiT+Tz

4mtmMEX+N+UmrAKABJUiGj7JD/lLPWAIKvOx+WlB47k2bTVZp5yTweezU0nOnaU5

gdoWqemWo5EC7JXO73ItLcKGQIY3qUu9tUTXUKTDO/XiDvPP04ggE9bODLfvoSBS

Ph5ANrtx0wxRMeu+VNoeqx8CAwEAAQ==

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

加密的数据:Web site:http://blog.kilvn.com

-------------------------------

公钥加密后的数据: WJ3JtHA9h+fJyPgl4WNtmplqexi6AvBCP0yC4zFo8AsgHyIu2u5Jt/olDw8Hmjmy4++XjdJwlKC9pNwNTiuj/TvDoWAulDJSgmrTZ/Jrp78K8Puik8n3Zudtmqj9rMMKAwgaX4t8+QRA+tBs5HiRUBpDsKPL8rejqIYZwMwxf67ldbwWFUtuFb8OWvG6EeQjPoKV2mOWi7/KnNFTLc6970sWTgcVe53KeqWrNyHvHLhQda3uom8lf1eOwOrOmhtI1sQdihH36LATCzObcDDsRTJr2oW3Y2d1Sx1npVJ92AvOmOVxFcena8ppkZ+cCRWAxTbiZejdLv9dGCn227yEm5/A5b1MXSHxZcXQ56Vy56Lo735+G6V5zkupVbQJrZBAJg0iDJPi6DFzffLMlTmRlszmiGxg67lxbKQQMhpYkVgZ9PfgYmXzUPVZSXRCz7zGkrP7qqAmbA2tGxRadh1FgekDmb8lSYEbLP6w1gKv5eJTCWYAeUTYuSHsLvCzF2+rJfRz9XrYYVaYAz5ECPCSCOSldENu97Ol612FWJuLZZNFiTLfpkqTYIvgSVGnqbuIMxU+HIifC+/cHabwSpvJ7q2lGmtdcv5mmHfi2V2XpB7SRfe67sbBIeIhF0XOqFoOf1VuhsC+ZP0INV1DIQVvTmivl5+IrORhrxc1c090Eso=

私钥解密后的数据: Web site:http://blog.kilvn.com

-------------------------------

签名的数据: enU5lIt8t7R5nsWw0OK7O8n4yttwo4cR44MDCqr8l4CmobLKgsFJyNskY33EtusisWST8UQconXtRxscEWrFXZTO74xsLKVLP1ZffJZyeRB0hiygNk/h3rZgtZXzGvMDBuOHBn40f4x+DQ83eZuvNPNNjA6nbuoBvyKT7WiP3bQ9HeJQBj7hfQhHbGYnOLwXTvXUbJDhDfpX6Ux4pAz9rjV14s9eKyfmncH0gIbHQDpMd+B06cdKi8i3pX2tGzPleEw9XRIfu1fkDxZ4J9ZruTUDUU0V5jhi+YlBFDo7Hsj3wsAVPTwOIgoRVwggaFCNeXLqx2u0u4BHj0FxJ6Qk2CC8izhcSoVQCfhrS3g9rUP5jCX4JP62kPJ1tIrxx2T+xs2tbdppe7q4Wx6EuIlZvWpnc7oHmPRP2Z3wEfsn49n8wI2f0zSYq3YmyrO0yEFT5bpvLggf6eyIsnnOO/uI/QfksAzSoKuJ3Wf6v0jYZrij/Y6d0jXIkn1MQpFjk5ZA4Dajt2frAzPXViqgdO8YuMFCFD5U2V6GnSYQ8xLR1V88zm3bH/baqqQFOMV0wMaZh9UtgBT5mCRXnUtYHdSjAhfj9xygOtw61p66EKO4Ykf7yxpivOI1QNn1hzA52MPktOTJwitUQXvSUDB5mgkjCPbS05LitAGU71REQ1urk5w=

验证的数据: 1

-------------------------------

Process finished with exit code 0

相关参考:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html post no js,接受POST请求的Node.js服务器

以下代码显示了如何从HTML表单读取值。正如pimvdb所说,您需要使用request.on(’data’…)来捕获正文的内容。const http require(http)const server http.createServer(function(request, response) {console.dir(request.param)if (request.method POST) {conso…

python excel 数据匹配实现vlookup功能_如何用python实现excel中的vlookup功能?

相信大家都知道excel的vlookup函数,也会运用,这是财务审计工作中经常会用到的函数之一,那用python如何实现这一功能呢?1.目标介绍刀哥想将2017年科目余额表中,应收账款明细的所有客户,以科目编码为索引&…

html 随机出一个地址,nginx random_index 一直指向一个html页面,不会随机

#配置如下#问题:random_index在location /中开启,但是刷新浏览器不会随机,只会一直访问其中一个html文件server {listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;#root "E:/phpStu…

双百双新产业项目是什么_投资380亿,广西38个“双百双新”产业项目开竣工

广西2020年四季度“双百双新”产业项目集中开竣工活动现场。图片由自治区工信厅提供柳州分会场视频连线。图片由自治区工信厅提供与会嘉宾。图片由自治区工信厅提供广西新闻网南宁12月8日讯(记者 谢琳琳)12月8日,广西举行2020年四季度“双百双新”产业项目集中开竣工…

微型计算机可避免强磁场干扰,微型计算机测控系统抗干扰技术

微型计算机测控系统抗干扰技术从电网干扰、传输线干扰、空间电磁干扰及机内干扰四方面 ,介(本文共2页)阅读全文>>微型计算机测控系统在运行的过程中会受到外部要素的影响,使系统运转失衡。为了避免出...(本文共1页)阅读全文>>微型计算机测控系统中通常存在着很多干…

ssm把后端数据传到前端_前端传数据到后台分别JSON和STRING接收 AJAX SPRINGBOOT ssm

前端时间复习了SSM,前后端传数据接收,做了个例子,分享下POMorg.springframework.bootspring-boot-starter-testtestorg.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-thymeleafcom.alibabafastj…

计算机技术与应用的知识5000字,计算机本科论文范文5000字

近些年来,我国国民经济正在不断地发展,国家日新月异的改变在很大程度上与计算机技术的应用有很大的关系,计算机科学对我国经济发展有着极大的促进作用。下文是学习啦小编为大家搜集整理的关于计算机本科论文范文5000字的内容,欢迎大家阅读参考!计算机本科论文范文50…

整活插件 炉石传说_酒馆战旗整活插件 免安装版

炉石传说酒馆战旗整活插件是一款专门用来帮助玩家跳过炉石传说战斗动画的工具。炉石传说中的战旗模式会在匹配成功后播放一段战斗动画,等到动画播放完毕才会正式进入选牌阶段开始游戏,而很多经常玩战旗模式的玩家早就对其烦不胜烦了。为此有玩家专门开发…

flv 自动播放 html autostart=true,《网页制作之FLV视频播放代码的编写.doc

《网页制作之FLV视频播放代码的编写网页制作之FLV视频播放代码的编写解决方案一:编写成js嵌入网页中 直接copy下面代码,修改其中红色部分,即:swf_width、swf_height、texts、files 参数引用其中:?群英传WEB版宣传视频…

html设置一个随机数的抽奖,随机数的运用---抽奖

首先我们先整理一下思路,看看需要用到些什么。1、随机数2、点击事件3、计时器4、抽完然后把定时器清一下在html中先写一个简单的框架然后我们来敲js//封装一个随机数function randoms(start, end) {return Math.floor(Math.random() * (end - start 1) start);};v…

妖帝q群机器人_有关酷Q 晨风机器人,契约 qqlite qqlight ,mypc等QQ机器人关停一事的一点想法...

估计有不少朋友都使用过QQ机器人,因为很多网友每天都要管理很多个QQ交流群,如果一个人管理,估计都得累死,所以一般都会使用QQ机器人来帮助自己管理。只是腾讯自身的QQ机器人实在不给力,功能太鸡肋,而且不支…

水厂计算机知识,计算机信息在水厂中的管理与应用的探讨

【摘 要】本文介绍了计算机信息在水厂中的管理与应用的相关问题,详细分析了计算机信息是如何在水厂分控站实现自动控制功能的,并在文章结尾总结了计算机信息管理控制的特点以及应用效果。【关键词】计算机;系统;水厂;信…

else 策略模式去掉if_业务复杂=if else?刚来的大神竟然用策略+工厂彻底干掉了他们!...

​对于业务开发来说,业务逻辑的复杂是必然的,随着业务发展,需求只会越来越复杂,为了考虑到各种各样的情况,代码中不可避免的会出现很多if-else。一旦代码中if-else过多,就会大大的影响其可读性和可维护性。…

e.html5.qq.com,QQ群官网-开放能力

8. 设置提醒组件8.1 功能说明应用可以调用该组件设置日历提醒8.2 组件说明组件使用365日历提供的日历服务在需要使用的页面上嵌入js然后在需要的地方如下调用即可window.openGroup.setReminder({appid: 101234888, // 选填,若不填则使用url参数appid(必须有)// 当前…

istio springcloud_手牵手一起学Springcloud(1)微服务这么流行,你理解了嘛?

在前一段时间,我们实验室的项目开始变得越来越麻烦,代码也越来越臃肿,一个人兼顾前后端的全栈开发,实在是力不从心,没有一点点幸福感,于是迫切的想要解放生产力,放飞自我,因此开始决…

2021年计算机应用基础统考题库,2021年计算机应用基础统考题库试卷全-20210515145621.doc-原创力文档...

一、单选题1、第三代计算机运算速度_____。A:高于第二代但低于第四代B:高于第一代但低于第二代C:低于第一代D:高于第四代答案: A2、将计算机分为通用计算机、专用计算机两类分类原则是______。A:计算机解决…

力改变物体形状举例_人教版八年级物理下册第七章《力》知识点大全

力是物体对物体的作用,比如推土机推动了土。知识点1:力1.概念:是物体对物体的作用叫做力。2.特点:物体间力的作用是相互的。3.力的单位和表示符号:(1)力的单位:牛顿,简称牛(N)。托起一个鸡蛋大约…

计算机29首流行音乐叫什么,流行歌曲有哪些 流行歌曲500首

流行歌曲有哪些 流行歌曲500首作者: 锦瑟更新日期: 2020-10-15 21:43:12音乐是一种能治愈人心的存在,它还可以炒热气氛和渲染气氛,总之歌曲的共情能力是很强的,相信没几个人会不喜欢音乐的吧。小编也喜欢在无聊的时候听一下音乐呢&#xff0c…

bool类型数组转换成一个整数_Go 学习笔记 02 | 基本数据类型以及 byte 和 rune 类型...

一、基本数据类型unsafe.Sizeof() 查看不同长度的整型在内存中的存储空间。 类型转换,高位向低位转换要注意溢出。数字字面量语法。64 位系统中 Go 语言中浮点数默认是 float64。二、Golang 中 float 精度丢失问题利用第三方包:http://github.com/shopsp…

计算机应用基础(高起专)答案,东北师范大学14秋《计算机应用基础(高起专)》14秋在线作业1答案...

计算机应用基础(高起专)《计算机应用基础(高起专)》14秋在线作业1 一,单选题1. 局域网组网完成后,决定网络使用性能的关键是A. 网络的拓扑结构B. 网络的通信协议C. 网络的传输介质D. 网络的操作系统?正确答案:D2. 加工处理汉字信息时,使用汉…