本文实例讲述了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算法示例相关推荐

  1. Java代码实现非对称加密RSA算法示例

    非对称加密:有两把密钥:使用公钥加密,必须使用私钥解密:或者使用私钥加密,必须使用公钥解密 加解密核心类:Cipher 下面代码是使用RSA算法加解密的一个示例,实现过程包括:生成密钥对,把公钥和私钥 ...

  2. c语言字符串非对称加密,RSA算法C语言实现(支持任意位密钥)

    之前分享过三种常用MD5.SHA2和AES加密算法(点这里)实现源码,前三者分别属于哈希加密和对称加密,而另一种很常用的非对称加密RSA算法实现这次分享出来.RSA算法的原理和用途大家可以网上自行搜索 ...

  3. 【工具编写】python实现非对称加密RSA算法

    python实现非对称加密RSA算法 0x01 RSA算法介绍 RSA加密算法是一种非对称加密算法.在公开密钥加密和电子商业中RSA被广泛使用.RSA是1977年由罗纳德·李维斯特(Ron Rives ...

  4. 非对称加密RSA算法原理及实际应用场景

    非对称加密RSA算法原理及实际应用场景 引言 应用场景 RSA 算法原理 数学基础 质数 欧拉定理 模指数运算 小白理解 为什么需要足够大的质数 引言 我数学差的离谱,所以我朋友去学AI,我还在这搞这 ...

  5. 加密基础知识二 非对称加密RSA算法和对称加密

    一.RSA的计算过程 上述过程中,出现了公钥(3233,17)和私钥(3233,2753),这两组数字是怎么找出来的呢?参考RSA算法原理(二) 首字母缩写说明:E是加密(Encryption)D是解 ...

  6. 非对称加密——RSA算法JAVA代码实践

    文章目录 说明 RSA加解密 测试代码 打印输出 说明 1:下面代码参考自<JAVA加密解密的艺术>,有部分修改,详见原理见原书 2:下面代码是RSA在JAVA中API级别的代码实现,具体 ...

  7. Android加密算法之非对称加密RSA

    丨版权说明 :<Android加密算法之非对称加密RSA>于当前CSDN博客和乘月网属同一原创,转载请说明出处,谢谢. 上文<Android加密算法之对称加密AES>提到与对称 ...

  8. 密码学03--go语言与非对称加密RSA算法的实现

    目录 1.对称加密的弊端 2.非对称加密 2.1 非对称加密使用场景 2.2 区分公私钥 2.3 非对称加密通信流程 2.4 非对称加密与对称加密 3.非对称加密RSA算法 3.1 RSA算法 3.2 ...

  9. (1)非对称加密——RSA——史上最通俗的小白可看懂!

    摘要 我身边有几个年龄分布在4-6岁的小朋友.由于他们还都不能熟练地掌握100以内的加减法,所以我原计划的对称加密,在他们看来还是有点难.那非对称加密呢,需要他们能熟练进行三位数的乘法,我想就可以逐步 ...

最新文章

  1. activeMQ - 消息重发策略和DLQ死信队列
  2. phpStudy mysql升级至5.7
  3. Flask实战2问答平台-父模板抽离(登录注册界面)
  4. 「五大常用算法」一文图解分治算法和思想
  5. Python 操作redis有序集合
  6. python得到列表list的交集与差集
  7. java ssm框架 缓存_SSM框架之MyBatis3专题4:查询缓存
  8. pythonATM,购物车项目实战_补充9文档说明
  9. vi/vim编辑器使用方法详解
  10. 商业保理业务信息化平台建设的要点分享
  11. 一键logo生成器_如何做海报?公众号封面图?logo?词云?试试这几个设计网站,用过的都说好!...
  12. oracle php 教程 pdf,AJAX+PHP+Oracle数据库Web开发 ((美)Lee Barney) 中文PDF扫描版 37.5M
  13. Threejs加载城市obj模型,加载人物gltf模型,Tweenjs实现人物根据规划的路线运动
  14. win,linux双系统开机引导修复
  15. Ctrl + 鼠标左键:跳转到对应的`定义位置`
  16. 几个重要的排列组合定理公式
  17. 华为云鲲鹏云服务抢占云上多元算力新赛道
  18. ubuntu18.04安装docker-ce国内源
  19. 大量的Oracle数据库视频教程提供下载
  20. mongodb与mysql连接_MongoDB连接数据库

热门文章

  1. 微博客户端播放器的演进之路
  2. 设计模式C++实现(4)——桥接模式
  3. 剑指offer之21-25题解
  4. 腾讯关系型数据库达成“双百”里程碑——6大企业级MySQL特性全面解析
  5. TEG六周年 | 同心筑梦 共赢未来
  6. Ceph 集群整体迁移方案
  7. 开源系统管理资源大合辑
  8. mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const char*, const char*)’
  9. Python异步编程Async/Await
  10. 爬虫 spider02——详析http