PHP rsa加密

Stella981
• 阅读 780

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

裸奔谁都能看到你的小秘密,丁丁太小会被发现噢。而裸睡不同,裸睡你是在家,门和窗是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!

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
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
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Karen110 Karen110
3年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这