<?php
namespace app\Parentclient\model;
header("Content-Type: text/html;charset=utf-8");
// 让敲代码成为一种 ___"时尚"
//
// .::::.
// .::::::::.
// :::::::::::
// ..:::::::::::'
// '::::::::::::'
// .::::::::::
// '::::::::::::::..
// ..::::::::::::.
// ``::::::::::::::::
// ::::``:::::::::' .:::.
// ::::' ':::::' .::::::::.
// .::::' :::: .:::::::'::::.
// .:::' ::::: .:::::::::' ':::::.
// .::' :::::.:::::::::' ':::::.
// .::' ::::::::::::::' ``::::.
// ...::: ::::::::::::' ``::.
// ```` ':. ':::::::::' ::::..
// '.:::::' '::'````..
// 美女保佑 ———— 项目无BUG_

$cookieStr    = $this->rsa->private_encrypt($token); /*si秘钥加密*/

一般用撕钥加密,用公钥解密

/*

生成公钥、私钥对,私钥加密的内容能通过公钥解密(反过来亦可以)

下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目录,执行以下命令:

openssl genrsa -out rsa_private_key.pem 1024 #生成原始 RSA私钥文件 rsa_private_key.pem
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem #将原始 RSA私钥转换为 pkcs8格式
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem #通过私钥生成对应 RSA公钥 rsa_public_key.pem

*/
$private_key = '-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAOH2AFAc8C9BzJTr
AaxUsOyUEIoT+T6u/T3YAhIYVcvVrM46GKSfcWu/iCI95c3RZIzyYZGYPnn2DsPD
Sus+pUr1eZVxZRgTDc0usYMyAr+/XPFcOEOt9T/kMJoTHl/6BbUweSDGFCovIQ7X
xuN0pLZITGUdyodxw7hS3A+AsqxhAgMBAAECgYBUU8RmIYaZfErnQJUNRUYJ5HAP
t8iK1i94RwbuzdonCgVFqXTM6xwfBAnADa2XlA+cclBrT4/xYBy+fkGVbXmtvk1j
kGWuVMXaI9jxQjwYrbiA5tT+kaWF4Gh5SyUnAKgLXX40YMCc5Fi/vXOD523QDvko
gnDMDODfs/ELaccuKQJBAPHhTXeJfYWYqCyHi1wO5ZFzUccJCL2OWYdbkkXx3fGC
gvLu6ybIuECz8sDxmd3ZpXUxo6n0mw2kA3TrfE6cf6cCQQDvJszYaddxwpx1yopB
dGBjXYGyOIf4CrZR9ryx3xfRIapNA7X6g5flMrltBo0yCqWtTmJKmmydQ3nzWOUk
nrS3AkA+8/W2k+lAeR/kHw8NUa88MPhqxhYpR8BTc2jZnX63WdF9KuO2/2y9Ilif
EQKL9BaVLus607f7T+G6b4O17hNnAkEA6teLKKkm64tT4Ue3ZHdHf8v+5Ggm/Shn
yS0mNvUAilkoxt/x/8LhkiyxcaKRXKaf8wOZ+fCS4Au24YRV4BQJGQJBALFDXGIT
mm23KFaIMC2Au/gpO5CBmwDkbdZaQXl6K6B/Vje6a3ke7mIiKCmkcG7kdax0LUta
1xJYypi0HZCq/0A=
-----END PRIVATE KEY-----';
$public_key = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDh9gBQHPAvQcyU6wGsVLDslBCK
E/k+rv092AISGFXL1azOOhikn3Frv4giPeXN0WSM8mGRmD559g7Dw0rrPqVK9XmV
cWUYEw3NLrGDMgK/v1zxXDhDrfU/5DCaEx5f+gW1MHkgxhQqLyEO18bjdKS2SExl
HcqHccO4UtwPgLKsYQIDAQAB
-----END PUBLIC KEY-----';
file_put_contents('public_key.txt', $public_key);
file_put_contents('private_key.txt', $private_key);

/**
* rsa 非对称加解密
*/
class rsa {
private $public_key = ''; //公密钥
private $private_key = ''; //私密钥
private $public_key_resource = ''; //公密钥资源
private $private_key_resource = ''; //私密钥资源
/**
* 架构函数
* @param [string] $public_key_file [公密钥文件地址]
* @param [string] $private_key_file [私密钥文件地址]
*/
public function __construct($public_key_file,$private_key_file) {
try {
if(!file_exists($public_key_file) || !file_exists($private_key_file)) {
throw new Exception('key file no exists');
}
if (false == ($this->public_key = file_get_contents($public_key_file)) || false == ($this->private_key = file_get_contents($private_key_file))) {
throw new Exception('read key file fail');
}
if(false == ($this->public_key_resource = $this->is_bad_public_key($this->public_key)) || false == ($this->private_key_resource = $this->is_bad_private_key($this->private_key))) {
throw new Exception('public key or private key no usable');
}

} catch (Exception $e) {
die($e->getMessage());
}
}
private function is_bad_public_key($public_key) {
return openssl_pkey_get_public($public_key);
}
private function is_bad_private_key($private_key) {
return openssl_pkey_get_private($private_key);
}
/**
* 生成一对公私密钥 成功返回 公私密钥数组 失败 返回 false
*/
public function create_key() {
$res = openssl_pkey_new();
if($res == false) return false;
openssl_pkey_export($res, $private_key);
$public_key = openssl_pkey_get_details($res);
return array('public_key'=>$public_key["key"],'private_key'=>$private_key);
}
/**
* 用私密钥加密
*/
// public function private_encrypt($input) {
// openssl_private_encrypt($input,$output,$this->private_key_resource);
// return base64_encode($output);
// }

//私钥加密
public function private_encrypt($data){
$crypto = '';
foreach (str_split($data, 117) as $chunk) {
openssl_private_encrypt($chunk, $encryptData, $this->private_key_resource);
$crypto .= $encryptData;
}
$encrypted = $this->urlsafe_b64encode($crypto);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
return $encrypted;
}

//加密码时把特殊符号替换成URL可以带的内容
function urlsafe_b64encode($string) {
$data = base64_encode($string);
$data = str_replace(array('+','/','='),array('-','_',''),$data);
return $data;
}

//解密码时把转换后的符号替换特殊符号
function urlsafe_b64decode($string) {
$data = str_replace(array('-','_'),array('+','/'),$string);
$mod4 = strlen($data) % 4;
if ($mod4) {
$data .= substr('====', $mod4);
}
return base64_decode($data);
}

//私钥加密的内容通过公钥可用解密出来
public function public_decrypt($encrypted){
$crypto = '';
foreach (str_split($this->urlsafe_b64decode($encrypted), 128) as $chunk) {
openssl_public_decrypt($chunk, $decryptData, $this->public_key_resource);
$crypto .= $decryptData;
}
return $crypto;
}

/**
* 解密 私密钥加密后的密文
*/
// public function public_decrypt($input) {
// openssl_public_decrypt(base64_decode($input),$output,$this->public_key_resource);
// return $input;
// }

/**
* 用公密钥加密
*/
public function public_encrypt($input) {
openssl_public_encrypt($input,$output,$this->public_key_resource);
return base64_encode($output);
}
/**
* 解密 公密钥加密后的密文
*/
public function private_decrypt($input) {
openssl_private_decrypt(base64_decode($input),$output,$this->private_key_resource);
return $output;
}

}

// $time = time();
// echo '时间戳=='.$time.'<br>';
// $rsa = new rsa('public_key.txt','private_key.txt');
// $str = '撇如惊鸿&'.$time;
// $str = $rsa->public_encrypt($str); //用公密钥加密
// echo '公秘钥加密=='.$str.'</br>';
// $str = $rsa->private_decrypt($str); //用私密钥解密
// echo '私秘钥解密=='.$str.'</br>';
// //=============================================================
// $str = $rsa->private_encrypt($str); //用丝密钥加密
// echo '私密钥加密=='.$str.'</br>';
// $str = $rsa->public_decrypt($str); //用公密钥解密
// echo '公密钥解密=='.$str.'</br>';

php 非对称加密解密类的更多相关文章

  1. Java常用的加密解密类(对称加密类)

    Java常用的加密解密类 原文转载至:http://blog.csdn.net/wyc_cs/article/details/8793198 原创 2013年04月12日 14:33:35 1704 ...

  2. [C#] 常用工具类——加密解密类

    using System; using System.Configuration; using System.Collections.Generic; using System.Text; using ...

  3. 对接携程供应商php加密解密类

    php加密解密类 <?php class Aes{ private $key = '6b4d63211b4ba869'; private $iv = 'dbbf079b95004f65'; pu ...

  4. PHP针对数字的加密解密类,可直接使用

    <?phpnamespace app;/** * 加密解密类 * 该算法仅支持加密数字.比较适用于数据库中id字段的加密解密,以及根据数字显示url的加密. * @author 深秋的竹子 *  ...

  5. Java对称与非对称加密解密,AES与RSA

    加密技术可以分为对称与非对称两种. 对称加密,解密,即加密与解密用的是同一把秘钥,常用的对称加密技术有DES,AES等 而非对称技术,加密与解密用的是不同的秘钥,常用的非对称加密技术有RSA等 为什么 ...

  6. 生成二维码 加密解密类 TABLE转换成实体、TABLE转换成实体集合(可转换成对象和值类型) COOKIE帮助类 数据类型转换 截取字符串 根据IP获取地点 生成随机字符 UNIX时间转换为DATETIME\DATETIME转换为UNIXTIME 是否包含中文 生成秘钥方式之一 计算某一年 某一周 的起始时间和结束时间

    生成二维码 /// <summary>/// 生成二维码/// </summary>public static class QRcodeUtils{private static ...

  7. java文本文件加密解密类

    原文:http://www.open-open.com/code/view/1420031154765 import java.awt.*; import java.awt.event.*; impo ...

  8. AES对称加密解密类

    import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.spec.Se ...

  9. CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互

    (以下代码中都只做测试用,有些地方没有释放内存...这个自己解决下) 1.RSA非对称的,首先提供一个供测试用的证书和私钥的数据 1)pem格式的证书和私钥(公私钥是对应的)的base64编码 voi ...

随机推荐

  1. [SCOI2012] 喵星球上的点名

    Description 给定 \(N\) 个姓名串和 \(M\) 个点名串.询问每个点名串点到了多少姓名和每个姓名串被点到了几次.\(N\leq 5\cdot 10^4,M\leq 10^5\). S ...

  2. 我对alias的重新认识:通过alias让rm更安全

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html rm的悲剧总是发生在不经意之间,所以无论是在shell脚本中还 ...

  3. js 计算快速统计中用到的日期

    前言 最近在做统计报表模块,其中查询条件用到了快速查询,主要为了方便客户统计查询常用的几个日期纬度,比如本周.上周.本月.上月.昨日. 使用js计算,主要用到了js Date. getDate().g ...

  4. ext js 4.0 grid表格根据列值的不同给行设置不同的背景颜色

    Code: Ext.create('Ext.grid.Panel', { ... viewConfig: { getRowClass: function(record) { return record ...

  5. Spring源码分析之IoC容器初始化

    本文首发于cdream个人博客(点击获得更加阅读体验) 欢迎转载,转载请注明出处 作为一个java程序员,保守估计一年里也都有300天要和Spring有亲密接触~~像我这种怕是每天都要撸撸Spring ...

  6. elasticsearch安装之各种坑

    我用的是centos6.5,安装elasticsearch5.2.0 首先不说了,安装JDK1.8,下载elasticsearch5.2.0 https://www.elastic.co/downlo ...

  7. jsp使用servlet实现文件上传

    1.在index.jsp中写入以下代码 <form method="post" action="demo3" enctype="multipar ...

  8. CSS 中的 BFC,IFC,GFC和FFC

    原文网址:http://www.cnblogs.com/dingyufenglian/p/4845477.html What‘s FC? 一定不是KFC,FC的全称是:Formatting Conte ...

  9. Mysql数据库多表查询

    一.介绍 首先说一下,我们写项目一般都会建一个数据库,那数据库里面是不是存了好多张表啊,不可能把所有的数据都放到一张表里面,肯定要分表来存数据,这样节省空间,数据的组织结构更清晰,解耦和程度更高,但是 ...

  10. 笔记-返回到前一个页面时显示前一个页面中ajax获取的数据

    笔记第一部分:http://www.cnblogs.com/zczhangcui/p/6869219.html 在第一部分遇到的问题是,用ajax获取了一系列列表信息后,拼接好html后插入到了原有页 ...