php封装一个加密算法,PHP封装的非对称加密RSA算法示例
本文实例讲述了PHP封装的非对称加密RSA算法。分享给大家供大家参考,具体如下:
将php的openssl扩展中的非对称加密函数封装成一个Rsa类。
需要注意的是,在windows上,需要打开openssl的配置文件,请参照官方的openssl扩展安装文档。
在windows上安装openssl扩展
1、将php路径下的两个库文件libeay32.dll和ssleay32.dll复制到操作system32下
2、配置openssl配置文件的位置,在php的路径下,有文件extras/openssl/openssl.cnf,添加环境变量OPENSSL_CONF指向这个文件的全路径。如何添加环境变量请google搜索之。
3、在php.ini里添加一行extension=php_openssl.dll
使用的demo:
//====================demo=======================
//以下是一个简单的测试demo,如果不需要请删除
$rsa = new Rsa('sslkey'); //sslkey为存放密钥的路径,将已有的密钥文件复制到该路径下,公钥名称为pub.key,私钥名称为priv.key
$rsa->createKey(); //创建一对密钥,如果密钥对已经存在,不需调用
//私钥加密,公钥解密
echo 'source:脚本之家
';
$pre = $rsa->privEncrypt('脚本之家');
echo 'private encrypted:
' . $pre . '
';
$pud = $rsa->pubDecrypt($pre);
echo 'public decrypted:' . $pud . '
';
//公钥加密,私钥解密
echo 'source:干IT的
';
$pue = $rsa->pubEncrypt('干IT的');
echo 'public encrypt:
' . $pue . '
';
$prd = $rsa->privDecrypt($pue);
echo 'private decrypt:' . $prd;
//========================demo======================
本示例在windows7、php 5.2.14、openssl 0.98下开发
/**
* 使用openssl实现非对称加密
*
*/
class Rsa
{
/**
* private key
*/
private $_privKey;
/**
* public key
*/
private $_pubKey;
/**
* the keys saving path
*/
private $_keyPath;
/**
* the construtor,the param $path is the keys saving path
*/
public function __construct($path)
{
if(empty($path) || !is_dir($path)){
throw new Exception('Must set the keys save path');
}
$this->_keyPath = $path;
}
/**
* create the key pair,save the key to $this->_keyPath
*/
public function createKey()
{
$r = openssl_pkey_new();
openssl_pkey_export($r, $privKey);
file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR . 'priv.key', $privKey);
$this->_privKey = openssl_pkey_get_private($privKey);
$rp = openssl_pkey_get_details($r);
$pubKey = $rp['key'];
file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR . 'pub.key', $pubKey);
$this->_pubKey = openssl_pkey_get_public($pubKey);
}
/**
* setup the private key
*/
public function setupPrivKey()
{
if(is_resource($this->_privKey)){
return true;
}
$file = $this->_keyPath . DIRECTORY_SEPARATOR . 'priv.key';
$prk = file_get_contents($file);
$this->_privKey = openssl_pkey_get_private($prk);
return true;
}
/**
* setup the public key
*/
public function setupPubKey()
{
if(is_resource($this->_pubKey)){
return true;
}
$file = $this->_keyPath . DIRECTORY_SEPARATOR . 'pub.key';
$puk = file_get_contents($file);
$this->_pubKey = openssl_pkey_get_public($puk);
return true;
}
/**
* encrypt with the private key
*/
public function privEncrypt($data)
{
if(!is_string($data)){
return null;
}
$this->setupPrivKey();
$r = openssl_private_encrypt($data, $encrypted, $this->_privKey);
if($r){
return base64_encode($encrypted);
}
return null;
}
/**
* decrypt with the private key
*/
public function privDecrypt($encrypted)
{
if(!is_string($encrypted)){
return null;
}
$this->setupPrivKey();
$encrypted = base64_decode($encrypted);
$r = openssl_private_decrypt($encrypted, $decrypted, $this->_privKey);
if($r){
return $decrypted;
}
return null;
}
/**
* encrypt with public key
*/
public function pubEncrypt($data)
{
if(!is_string($data)){
return null;
}
$this->setupPubKey();
$r = openssl_public_encrypt($data, $encrypted, $this->_pubKey);
if($r){
return base64_encode($encrypted);
}
return null;
}
/**
* decrypt with the public key
*/
public function pubDecrypt($crypted)
{
if(!is_string($crypted)){
return null;
}
$this->setupPubKey();
$crypted = base64_decode($crypted);
$r = openssl_public_decrypt($crypted, $decrypted, $this->_pubKey);
if($r){
return $decrypted;
}
return null;
}
public function __destruct()
{
@ fclose($this->_privKey);
@ fclose($this->_pubKey);
}
}
PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:
在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:http://tools.jb51.net/password/hash_md5_sha
希望本文所述对大家PHP程序设计有所帮助。
php封装一个加密算法,PHP封装的非对称加密RSA算法示例相关推荐
- Java代码实现非对称加密RSA算法示例
非对称加密:有两把密钥:使用公钥加密,必须使用私钥解密:或者使用私钥加密,必须使用公钥解密 加解密核心类:Cipher 下面代码是使用RSA算法加解密的一个示例,实现过程包括:生成密钥对,把公钥和私钥 ...
- c语言字符串非对称加密,RSA算法C语言实现(支持任意位密钥)
之前分享过三种常用MD5.SHA2和AES加密算法(点这里)实现源码,前三者分别属于哈希加密和对称加密,而另一种很常用的非对称加密RSA算法实现这次分享出来.RSA算法的原理和用途大家可以网上自行搜索 ...
- 【工具编写】python实现非对称加密RSA算法
python实现非对称加密RSA算法 0x01 RSA算法介绍 RSA加密算法是一种非对称加密算法.在公开密钥加密和电子商业中RSA被广泛使用.RSA是1977年由罗纳德·李维斯特(Ron Rives ...
- 非对称加密RSA算法原理及实际应用场景
非对称加密RSA算法原理及实际应用场景 引言 应用场景 RSA 算法原理 数学基础 质数 欧拉定理 模指数运算 小白理解 为什么需要足够大的质数 引言 我数学差的离谱,所以我朋友去学AI,我还在这搞这 ...
- 加密基础知识二 非对称加密RSA算法和对称加密
一.RSA的计算过程 上述过程中,出现了公钥(3233,17)和私钥(3233,2753),这两组数字是怎么找出来的呢?参考RSA算法原理(二) 首字母缩写说明:E是加密(Encryption)D是解 ...
- 非对称加密——RSA算法JAVA代码实践
文章目录 说明 RSA加解密 测试代码 打印输出 说明 1:下面代码参考自<JAVA加密解密的艺术>,有部分修改,详见原理见原书 2:下面代码是RSA在JAVA中API级别的代码实现,具体 ...
- Android加密算法之非对称加密RSA
丨版权说明 :<Android加密算法之非对称加密RSA>于当前CSDN博客和乘月网属同一原创,转载请说明出处,谢谢. 上文<Android加密算法之对称加密AES>提到与对称 ...
- 密码学03--go语言与非对称加密RSA算法的实现
目录 1.对称加密的弊端 2.非对称加密 2.1 非对称加密使用场景 2.2 区分公私钥 2.3 非对称加密通信流程 2.4 非对称加密与对称加密 3.非对称加密RSA算法 3.1 RSA算法 3.2 ...
- (1)非对称加密——RSA——史上最通俗的小白可看懂!
摘要 我身边有几个年龄分布在4-6岁的小朋友.由于他们还都不能熟练地掌握100以内的加减法,所以我原计划的对称加密,在他们看来还是有点难.那非对称加密呢,需要他们能熟练进行三位数的乘法,我想就可以逐步 ...
最新文章
- activeMQ - 消息重发策略和DLQ死信队列
- phpStudy mysql升级至5.7
- Flask实战2问答平台-父模板抽离(登录注册界面)
- 「五大常用算法」一文图解分治算法和思想
- Python 操作redis有序集合
- python得到列表list的交集与差集
- java ssm框架 缓存_SSM框架之MyBatis3专题4:查询缓存
- pythonATM,购物车项目实战_补充9文档说明
- vi/vim编辑器使用方法详解
- 商业保理业务信息化平台建设的要点分享
- 一键logo生成器_如何做海报?公众号封面图?logo?词云?试试这几个设计网站,用过的都说好!...
- oracle php 教程 pdf,AJAX+PHP+Oracle数据库Web开发 ((美)Lee Barney) 中文PDF扫描版 37.5M
- Threejs加载城市obj模型,加载人物gltf模型,Tweenjs实现人物根据规划的路线运动
- win,linux双系统开机引导修复
- Ctrl + 鼠标左键:跳转到对应的`定义位置`
- 几个重要的排列组合定理公式
- 华为云鲲鹏云服务抢占云上多元算力新赛道
- ubuntu18.04安装docker-ce国内源
- 大量的Oracle数据库视频教程提供下载
- mongodb与mysql连接_MongoDB连接数据库
热门文章
- 微博客户端播放器的演进之路
- 设计模式C++实现(4)——桥接模式
- 剑指offer之21-25题解
- 腾讯关系型数据库达成“双百”里程碑——6大企业级MySQL特性全面解析
- TEG六周年 | 同心筑梦 共赢未来
- Ceph 集群整体迁移方案
- 开源系统管理资源大合辑
- mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’
- Python异步编程Async/Await
- 爬虫 spider02——详析http