PHP实现RSA加密解密

PHPzkbhj 发表了文章 • 0 个评论 • 1508 次浏览 • 2017-06-16 10:25 • 来自相关话题

class Someet
{

//加密方法 $data 加密字符串
public static function getencrypt($data){

// 公钥加密
$encrypt_data = '';
//获取公钥
$pubkey = openssl_pkey_get_public(file_get_contents('someet_pub.key'));
openssl_public_encrypt($data, $encrypt_data, $pubkey);
$encrypt_data = base64_encode($encrypt_data);
return $encrypt_data;

}


//解密方法 $encrypt_data 获取的加密后的字符串
public static function getdecrypt($encrypt_data)
{
//把解密的字符串里的,空格转换为+号
$encrypt_data = str_replace(' ','+', $encrypt_data);
// 私钥解密
$prikey = openssl_pkey_get_private(file_get_contents('someet.key'));
$encrypt_data = base64_decode($encrypt_data);
openssl_private_decrypt($encrypt_data, $decrypt_data, $prikey);
return $decrypt_data;
}


}

//使用
$sommet = new Someet();
//加密
$encrypt = $sommet->getencrypt($encryptkey);
//解密
$decrypt = $sommet->getdecrypt($decryptkey);


RSA的加密解密,对加密串的格式要求非常严格,不同语言,像Java,.net 加密输出的串,到达php页面,会出现加号被转成空格的情况,因为php get 会默认执行一遍 urldecode, 而urldecode 会把加号转为空格,从而导致整个加密串发生了变化,所以解密不出来。
生成公钥、私钥对,私钥加密的内容能通过公钥解密(反过来亦可以)

下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目录,执行以下命令:openssl genrsa -out rsa_private_key.pem 1024
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
第一条命令生成原始 RSA私钥文件 rsa_private_key.pem,第二条命令将原始 RSA私钥转换为 pkcs8格式,第三条生成RSA公钥 rsa_public_key.pem
从上面看出通过私钥能生成对应的公钥,因此我们将私钥private_key.pem用在服务器端,公钥发放给Android跟iOS等前端。 查看全部

timg_(1).jpg
class Someet
{

//加密方法 $data 加密字符串
public static function getencrypt($data){

// 公钥加密
$encrypt_data = '';
//获取公钥
$pubkey = openssl_pkey_get_public(file_get_contents('someet_pub.key'));
openssl_public_encrypt($data, $encrypt_data, $pubkey);
$encrypt_data = base64_encode($encrypt_data);
return $encrypt_data;

}


//解密方法 $encrypt_data 获取的加密后的字符串
public static function getdecrypt($encrypt_data)
{
//把解密的字符串里的,空格转换为+号
$encrypt_data = str_replace(' ','+', $encrypt_data);
// 私钥解密
$prikey = openssl_pkey_get_private(file_get_contents('someet.key'));
$encrypt_data = base64_decode($encrypt_data);
openssl_private_decrypt($encrypt_data, $decrypt_data, $prikey);
return $decrypt_data;
}


}

//使用
$sommet = new Someet();
//加密
$encrypt = $sommet->getencrypt($encryptkey);
//解密
$decrypt = $sommet->getdecrypt($decryptkey);


RSA的加密解密,对加密串的格式要求非常严格,不同语言,像Java,.net 加密输出的串,到达php页面,会出现加号被转成空格的情况,因为php get 会默认执行一遍 urldecode, 而urldecode 会把加号转为空格,从而导致整个加密串发生了变化,所以解密不出来。
生成公钥、私钥对,私钥加密的内容能通过公钥解密(反过来亦可以)

下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目录,执行以下命令:
openssl genrsa -out rsa_private_key.pem 1024
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

第一条命令生成原始 RSA私钥文件 rsa_private_key.pem,第二条命令将原始 RSA私钥转换为 pkcs8格式,第三条生成RSA公钥 rsa_public_key.pem
从上面看出通过私钥能生成对应的公钥,因此我们将私钥private_key.pem用在服务器端,公钥发放给Android跟iOS等前端。

JS如何转换时间戳?

回复

前端开发zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 2993 次浏览 • 2017-06-15 16:21 • 来自相关话题

什么是悲观锁和乐观锁?

回复

Yii框架zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 2032 次浏览 • 2017-06-12 14:29 • 来自相关话题

【读书笔记】《高性能PHP7》

读书笔记zkbhj 发表了文章 • 0 个评论 • 1661 次浏览 • 2017-06-12 13:28 • 来自相关话题

所读书籍:《高性能PHP7》
开始时间:2017年6月12日
预计结束时间:2017年6月25日





 
读书笔记Day1:
第一章讲述了如何在windows、Linux等操作系统上安装PHP7开发所需要的工具,如Nginx、PHP7、Mysql等,略读一下即过即可,如果是入门的朋友,可以按照上面的流程操作一次即可。
 
第二章开始详细讲述PHP7的新特新。
PHP7提供了一些OOP特性
1、类型声明
PHP7中引入了类型声明,目前明确的两类变量可以声明类型:形参和返回值。
支持的形参类型声明的类型有整形、浮点型、字符串型、布尔类型。可以用在函数形参和对象方法上。代码示例:class Person
{
public function age(int $age) : int
{
return $age;
}

public function name(string $name) : string
{
return $name;
}

public function isAlive(bool $alive) : bool
{
return $alive;
}
}
情况下,形参类型声明不是被完全限制的,不过可以使用如下方式进行强制限制:declare( strict_type = 1 )在有返回值声明时,仅接受所声明类型的数据。
使用类型声明的好处是,可以让函数、方法的形参和返回值有所预期,避免出现不必要的数据传递,从而造成错误,而且使代码更清晰,可读性更高。
2、命名空间与use关键字批量声明
三种使用类、方法和常量的方式//Class
$book = new Publishers\Packt\Book();

//Function
echo Publishers/Packt/getBook();

//constants
echo Publishers\Packt\COUNT;//Class
use Publishers\Packt\Book;

//Function
use function Publishers\Packt\getBook;

//const
use const Publishers\Packt\COUNT

$book = new Book();
echo getBook();
echo COUNT;第三种方式就是PHP7中新引入的方式,批量的use声明,有三种模式:

非混合模式的use声明、混合模式的use声明和复合模式的use声明。//非混合模式的use声明
//Class
use Publishers\Packt\{ Book, Ebook, Video}

//Function
use function Publishers\Packt\{ getBook, saveBook}

//const
use const Publishers\Packt\{COUNT , KEY}//混合模式的use声明
//Class
use Publishers\Packt\{
Book,
Ebook,
Video,
function getBook,
function saveBook,
const COUNT,
const KEY
}
//复合模式的use声明
use Publishers\Packt\{
Paper\Book,
Electronic\Ebook,
Media\Video
}3、匿名类:
匿名类的声明和使用是同时进行的,具备其他类的所有功能,没有类名。
参数可以直接设置在匿名类中当作构造函数的参数。
匿名类可以继承父类及父类的 方法,也可以继承接口。
匿名类可以嵌套在一个类中使用。 查看全部
所读书籍:《高性能PHP7》
开始时间:2017年6月12日
预计结束时间:2017年6月25日

58af818bN9047cc48.jpg

 
读书笔记Day1:
第一章讲述了如何在windows、Linux等操作系统上安装PHP7开发所需要的工具,如Nginx、PHP7、Mysql等,略读一下即过即可,如果是入门的朋友,可以按照上面的流程操作一次即可。
 
第二章开始详细讲述PHP7的新特新。
PHP7提供了一些OOP特性
1、类型声明
PHP7中引入了类型声明,目前明确的两类变量可以声明类型:形参和返回值。
支持的形参类型声明的类型有整形、浮点型、字符串型、布尔类型。可以用在函数形参和对象方法上。代码示例:
class Person
{
public function age(int $age) : int
{
return $age;
}

public function name(string $name) : string
{
return $name;
}

public function isAlive(bool $alive) : bool
{
return $alive;
}
}

情况下,形参类型声明不是被完全限制的,不过可以使用如下方式进行强制限制:
declare( strict_type = 1 )
在有返回值声明时,仅接受所声明类型的数据。
使用类型声明的好处是,可以让函数、方法的形参和返回值有所预期,避免出现不必要的数据传递,从而造成错误,而且使代码更清晰,可读性更高。
2、命名空间与use关键字批量声明
三种使用类、方法和常量的方式
//Class
$book = new Publishers\Packt\Book();

//Function
echo Publishers/Packt/getBook();

//constants
echo Publishers\Packt\COUNT;
//Class
use Publishers\Packt\Book;

//Function
use function Publishers\Packt\getBook;

//const
use const Publishers\Packt\COUNT

$book = new Book();
echo getBook();
echo COUNT;
第三种方式就是PHP7中新引入的方式,批量的use声明,有三种模式:

非混合模式的use声明、混合模式的use声明和复合模式的use声明。
//非混合模式的use声明
//Class
use Publishers\Packt\{ Book, Ebook, Video}

//Function
use function Publishers\Packt\{ getBook, saveBook}

//const
use const Publishers\Packt\{COUNT , KEY}
//混合模式的use声明
//Class
use Publishers\Packt\{
Book,
Ebook,
Video,
function getBook,
function saveBook,
const COUNT,
const KEY
}
//复合模式的use声明
use Publishers\Packt\{
Paper\Book,
Electronic\Ebook,
Media\Video
}
3、匿名类:
匿名类的声明和使用是同时进行的,具备其他类的所有功能,没有类名。
参数可以直接设置在匿名类中当作构造函数的参数。
匿名类可以继承父类及父类的 方法,也可以继承接口。
匿名类可以嵌套在一个类中使用。

如何在windows当前目录下打开cmd命令窗口?

回复

工具软件zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 4897 次浏览 • 2022-11-24 11:19 • 来自相关话题

Windows下面怎么创建和删除软连接?

回复

工具软件zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 4592 次浏览 • 2017-06-11 23:00 • 来自相关话题

PHP大会笔记:如何无痛解决MySQL扩展性和一致性问题

会议zkbhj 发表了文章 • 0 个评论 • 1898 次浏览 • 2017-06-11 16:10 • 来自相关话题

PHP大会笔记:PHP安全开发,从白帽角度做安全

会议zkbhj 发表了文章 • 0 个评论 • 1870 次浏览 • 2017-06-11 15:25 • 来自相关话题

演讲大纲WEb安全现状
常见漏洞分析
如何提升系统安全性
 
安全案例
案例一:17岁小孩儿黑产月入8000+?QQ线报群。
案例二:对公网开放3306端口的服务器数量是180万之多。
 
WEB漏洞的特征
常规漏洞、逻辑漏洞、第三方通用漏洞
 
常规漏洞:代码注入、文件包含、CSRF、SQL注入、XSS跨站、脚本
本地文件包含漏洞





远程文件包含龙洞





 
避免?
open_basedir限制活动范围
过滤点斜杠反斜杠
禁止服务器远程包含文件
 
PHP代码注入如何防范?
不要把参数直接存储位可以运行的代码
尽量不要使用eval执行接收的参数
 
PHP安全开发扩展Taint,会提示未对入餐进行校验的部分进行warning提示
 
常规漏洞的特点
参数过滤不严谨
可以通过扫描器扫描出来
代码层面的bug
 
 
业务逻辑漏洞
验证码突破
业务授权安全
业务流程扰乱等
 
业务逻辑漏洞案例
平行越权漏洞案例:A能看到B的订单信息
垂直越权漏洞案例:普通用户进入管理员后台
 
越权逻辑漏洞防范
前后台的查询尽量不用同一个查询接口
尽量不要暴露出连续ID如订单号
越权不仅限于展示,修改数据也会出现
 
通用型漏洞:第三方开源系统的漏洞
 
如何防范漏洞?
SDL:安全开发生命周期,来自如微软,用于office和Windows之后,安全漏洞减少。
 
提升web应用的安全性,减少应用的安全漏洞数量
降低安全漏洞的修复成本





PPT下载:https://github.com/devlinkcn/ppts_for_php2017/blob/master/PHP%E5%AE%89%E5%85%A8%E5%BC%80%E5%8F%91_%E4%BB%8E%E7%99%BD%E5%B8%BD%E8%A7%92%E5%BA%A6%E5%81%9A%E5%AE%89%E5%85%A8--%E6%B1%A4%E9%9D%92%E6%9D%BE.pdf
  查看全部
演讲大纲WEb安全现状
常见漏洞分析
如何提升系统安全性
 
安全案例
案例一:17岁小孩儿黑产月入8000+?QQ线报群。
案例二:对公网开放3306端口的服务器数量是180万之多。
 
WEB漏洞的特征
常规漏洞、逻辑漏洞、第三方通用漏洞
 
常规漏洞:代码注入、文件包含、CSRF、SQL注入、XSS跨站、脚本
本地文件包含漏洞

WechatIMG760.jpeg

远程文件包含龙洞

WechatIMG770.jpeg

 
避免?
open_basedir限制活动范围
过滤点斜杠反斜杠
禁止服务器远程包含文件
 
PHP代码注入如何防范?
不要把参数直接存储位可以运行的代码
尽量不要使用eval执行接收的参数
 
PHP安全开发扩展Taint,会提示未对入餐进行校验的部分进行warning提示
 
常规漏洞的特点
参数过滤不严谨
可以通过扫描器扫描出来
代码层面的bug
 
 
业务逻辑漏洞
验证码突破
业务授权安全
业务流程扰乱等
 
业务逻辑漏洞案例
平行越权漏洞案例:A能看到B的订单信息
垂直越权漏洞案例:普通用户进入管理员后台
 
越权逻辑漏洞防范
前后台的查询尽量不用同一个查询接口
尽量不要暴露出连续ID如订单号
越权不仅限于展示,修改数据也会出现
 
通用型漏洞:第三方开源系统的漏洞
 
如何防范漏洞?
SDL:安全开发生命周期,来自如微软,用于office和Windows之后,安全漏洞减少。
 
提升web应用的安全性,减少应用的安全漏洞数量
降低安全漏洞的修复成本

WechatIMG780.jpeg

PPT下载:https://github.com/devlinkcn/ppts_for_php2017/blob/master/PHP%E5%AE%89%E5%85%A8%E5%BC%80%E5%8F%91_%E4%BB%8E%E7%99%BD%E5%B8%BD%E8%A7%92%E5%BA%A6%E5%81%9A%E5%AE%89%E5%85%A8--%E6%B1%A4%E9%9D%92%E6%9D%BE.pdf
 

PHP大会笔记:Swoole2.0原生协程高性能开发实践

会议zkbhj 发表了文章 • 0 个评论 • 1983 次浏览 • 2017-06-11 13:34 • 来自相关话题

Swoole2.0原生携程探索经验
PHP的并发IO之路





Yield携程





Yield问题




原生协程



















Swoole小而美,
提供异步的IO高性能
原生携程能力
通用原子能力封装
 
连接池





 
频率监测




过载保护





服务监控















QQ看点优化经验分享




















  查看全部
Swoole2.0原生携程探索经验
PHP的并发IO之路
WechatIMG549.jpeg


Yield携程
WechatIMG550.jpeg


Yield问题
WechatIMG560.jpeg

原生协程
WechatIMG570.jpeg


WechatIMG580.jpeg


WechatIMG590.jpeg


WechatIMG600.jpeg

Swoole小而美,
提供异步的IO高性能
原生携程能力
通用原子能力封装
 
连接池

WechatIMG610.jpeg

 
频率监测
WechatIMG620.jpeg

过载保护

WechatIMG630.jpeg

服务监控

WechatIMG640.jpeg


WechatIMG650.jpeg


WechatIMG660.jpeg

QQ看点优化经验分享

WechatIMG670.jpeg


WechatIMG680.jpeg


WechatIMG690.jpeg


WechatIMG700.jpeg

 

PHP大会笔记:云原生的MySQL 托管服务架构及读写分离的优化

会议zkbhj 发表了文章 • 0 个评论 • 1671 次浏览 • 2017-06-11 13:07 • 来自相关话题

DevOps 开发工程师运维
 
云原生的MySQL PaaS服务:高可用高可靠




 
DevOps 开发工程师运维
 
云原生的MySQL PaaS服务:高可用高可靠
WechatIMG710.jpeg