PHP rsa加密

##为什么要进行数据加密 嘿嘿,这个问题就和裸奔、裸睡一样,裸奔不好,裸睡可以。

裸奔谁都能看到你的小秘密,丁丁太小会被发现噢。而裸睡不同,裸睡你是在家,门和窗是API但是都有相应的保护措施。裸睡在家更自由,速度更快更敏捷,但是在外面裸奔你可要注意了,万一有仇视裸奔行为的人发现了你酱紫,那就对不起啦,割掉你的小丁丁。

所以,我们还是不要裸奔啦,让我们穿上衣服吧!

##常用加密方式 我个人把加密看做4大类

  1. 对称加密
  2. 非对称加密
  3. 散列加密
  4. 其他

对称加密常用的一般为:des aes ...

非对称机密: rsa...

散列加密: md5 hash...

##RSA加密 RSA的来由可以参考阮一峰的网络日志

我就不详细介绍了,说一说RSA在PHP的实现吧

##PHP实现

###获取公匙和私匙 首先,我们得有衣服,没有衣服怎么穿(公匙和私匙),对吧!获取方式:

  1. linux shell

    genrsa -out rsa_private_key.pem 1024 rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

会产生2个文件,rsa_private_key.pem,rsa_public_key.pem

  1. 用PHP产生

    $config = [ "private_key_bits" => 1024, "private_key_type" => OPENSSL_KEYTYPE_RSA, ]; $r = openssl_pkey_new($config); openssl_pkey_export($r, $privateKey); //产生私钥 $rp = openssl_pkey_get_details($r); $pubKey = $rp['key']; //得到公钥

RSA的加解密过程(使用公钥加密、私钥解密)

  1. composer lwl1989/rsa 示例

    $rsa = new RSAGenerate(); $publicKey = $rsa->getPublicKey(); $privateKey = $rsa->getPrivateKey(); $serverProvider = new Provider(['public_key'=>$publicKey,'private_key'=>$privateKey]); $pass = $serverProvider->publicKeyEncode('12345'); $pass = $serverProvider->decodePublicEncode($pass);
  2. 分析加密过程

    $public_key = openssl_pkey_get_public($this->_config['public_key']); //设置公匙 openssl_public_encrypt($data, $encrypted, $public_key); //使用openssl进行加密 return !empty($encrypted)?base64_encode($encrypted):''; //对结果再次base64

    其实base64是不需要的,只是为了保证数据的正确性而为之,可以看出,最重要的2步为:

    设置公匙 以公匙进行加密
  3. 分析解密过程

同样还会有2次base64噢

decodePublicEncode $private_key = openssl_pkey_get_private($this->_config['private_key']); //设置公匙 openssl_private_decrypt(base64_decode($data), $decrypted, $private_key); //私钥解密 return !empty($decrypted)?$decrypted:''; 可以看出 同样还是2 设置私匙 以私匙解密

##其他 本文代码位于 GITHUB

可以直接使用composer require "lwl1989/rsa"进行安装

JS推荐使用jsencrypt,github上可以搜到,在我的github上我也会完善一个demo!

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )