1、检查服务器是否已安装了openssl组件,没有则先安装好

  openssl version [-a]

2、对称加密

  查询openssl支持的对称加密算法

  openssl_get_cipher_methods();

加密:openssl_encrypt($data, $method, $passwd, $options, $iv);

参数说明:

$data: 加密明文

$method: 加密方法

$passwd: 加密密钥

$options: 数据格式选项(可选)

$iv: 加密初始化向量(可选)

解密:openssl_decrypt($data, $method, $passwd, $options, $iv);

参数说明:

$data: 解密密文

$method: 解密加密方法

$passwd: 解密密钥

$options: 数据格式选项(可选)

$iv: 解密初始化向量(可选)

3、生成公钥、私钥对

(1)生成原始RSA私钥文件rsa_private_key.pem

openssl genrsa -out rsa_private_key.pem 1024

(2)将原始的RSA私钥转换为pkcs8模式

openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem

(3)生成RSA公钥 rsa_public_key.pem

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

4、使用私钥加密、公钥解密

使用的私钥为上述生成的rsa_private_key.pem文件内容

使用的公钥为上述生成的rsa_public_key.pem文件内容

 // 生成密钥资源id
$pi_key = openssl_pkey_get_private($private_key);
$pu_key = openssl_pkey_get_public($public_key); // 私钥加密
$encrypted = ‘’;
openssl_private_encrypt($data, $encrypted, $pi_key); // 转码,这里的$encrypted就是私钥加密的字符串
$encrypted = base64_encode($encrypted); // 公钥解密,$decrypted即为公钥解密后私钥加密前的明文
$decrypted = ‘’;
$encrypted = base64_decode($encrypted);
openssl_public_decrypt($encrypted, $decrypted, $pu_key);

5、使用公钥加密、私钥解密

使用的私钥为上述生成的rsa_private_key.pem文件内容

使用的公钥为上述生成的rsa_public_key.pem文件内容

 // 生成密钥资源id
$pi_key = openssl_pkey_get_private($private_key);
$pu_key = openssl_pkey_get_public($public_key); // 公钥加密
$encrypted = ‘’;
openssl_public_encrypt($data, $encrypted, $pu_key); // 转码,这里的$encrypted就是公钥加密的字符串
$encrypted = base64_encode($encrypted); // 私钥解密,$decrypted即为私钥解密后公钥加密前的明文
$decrypted = ‘’;
$encrypted = base64_decode($encrypted);
openssl_private_decrypt($encrypted, $decrypted, $pu_key);

完整代码演示:

 <?php
/**
* Created by PhpStorm.
* User: ahao
* Date: 2016/11/20
* Time: 10:12
*/
// 列出openssl加密扩展支持的对称加密方法
/*$methods = openssl_get_cipher_methods();
echo "<pre>";
var_dump($methods); $iv = substr(md5('test'),0,8);
$encrypt_data = openssl_encrypt('codeman is a good man','des-cbc','passwd',OPENSSL_RAW_DATA,$iv);
$encrypt_data = openssl_encrypt('codeman is a good man','des-cbc','passwd',OPENSSL_RAW_DATA);
echo $encrypt_data;
echo "<br/>"; $decrypt_data = openssl_decrypt($encrypt_data,'des-cbc','passwd',OPENSSL_RAW_DATA,$iv);
echo $decrypt_data;*/ // 私钥
$private_key = '-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDS6VbgEpOwVc8jXYx/uL6ItMS6aBPVo8fvw0pd90jLJYvfJcFJ
dYVFh6JPRdpGhlIrED45VdsktcJvJj0cLNI5ZIZ680aS6JTFe3ScBY4Mi7bLKzBN
YtMBtnkAFbMmWlCXV4qzZYg8+xNktY5ClZZCvZzzlaU5djtUSoxTLkxcmwIDAQAB
AoGAZT944gZo+bynvH17JhEk/nFxA19VLjj6kSH6AFPmkQcMN2pjeIU/Hhq3k0Cg
QTzYEy4wAMwzcFME7OC5c14c6GsnOQVEbzT3jA5lNuMnrvb+ehyE0w/O7ah8sSLQ
3B42GFKkaKiuY2ufsVC4pv6LMn5Sh26ApW332yO0dXZXagECQQDvAWV+n41R9pUp
iB0+ycBvkuE6yjlohc2MqAxdD+EYNgO4jb1F21pZcqasd/SbpiQwVUKk/uxlOvl9
3dBlcOWbAkEA4eiMv8UiGwBxjBGrz+I/tBq56gcnjvlOkJFyAyxbKaA1C9C51eVv
39OftI9DqCzcuAYZsCmspb6XEPBIB01VAQJAZVyAQM1Fz+b1p6F0VbaWiDsQjjBJ
XIyyed6jL6yWWABAX7qs9L1sedbn3OkashAp9N2T4AnFE8GJIdo6kWrp1QJAGOiF
LFfWDNgdrO393av6jicsPIuRZwhCC1qeEY+AdbR+ZNEczGLB1RIGV+g7830O0ROL
HYtax+Od0HZN2tBCAQJBANIg+HO5+Qy5hgRO3+uRHERgUQxqHzheLdo5GnoQ/sfT
sex4mxgze6oq+HldvNWzVjBu9g9417T5WMgyWQ8Unhw=
-----END RSA PRIVATE KEY-----'; // 公钥
$public_key = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDS6VbgEpOwVc8jXYx/uL6ItMS6
aBPVo8fvw0pd90jLJYvfJcFJdYVFh6JPRdpGhlIrED45VdsktcJvJj0cLNI5ZIZ6
80aS6JTFe3ScBY4Mi7bLKzBNYtMBtnkAFbMmWlCXV4qzZYg8+xNktY5ClZZCvZzz
laU5djtUSoxTLkxcmwIDAQAB
-----END PUBLIC KEY-----'; //这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
$pi_key = openssl_pkey_get_private($private_key); //这个函数可用来判断公钥是否是可用的
$pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的 print_r($pi_key); echo "<br/>";
print_r($pu_key); echo "<br/>"; // 原始数据
$data = 'codeman';
$encrypted = '';
$decrypted = ''; echo "source data:",$data,"<br/>";
echo "private key encrypt:<br/>";
echo "私钥加密,公钥解密:<br/>"; // 私钥加密
openssl_private_encrypt($data, $encrypted, $pi_key);
$encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
echo $encrypted,"<br/>"; // 公钥解密
echo "public key decrypt:<br/>";
openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私钥加密的内容通过公钥可用解密出来
echo $decrypted,"<br/><br/>"; echo "公钥加密,私钥解密:<br/>";
//公钥加密
openssl_public_encrypt($data, $encrypted, $pu_key);
$encrypted = base64_encode($encrypted);
echo $encrypted,"<br/>"; // 私钥解密
echo "private key decrypt:<br/>";
openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//私钥解密
echo $decrypted,"<br/>";

6、PHP openssl和mcrypt扩展的区别

openssl是一种公私钥的网络通信安全协议,也算一种加密模式,php的openssl扩展是为了用这个协议加密和解密传输数据用的。与mcrypt相比,openssl支持更多的加密方法,使用更加简单,支持非对称加密解密,是安装签名https的核心组件。

PHP openssl加密扩展使用总结的更多相关文章

  1. PHP的openssl加密扩展使用小结

    h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...

  2. PHP的OpenSSL加密扩展学习(一):对称加密

    我们已经学过不少 PHP 中加密扩展相关的内容了.而今天开始,我们要学习的则是重点中的重点,那就是 OpenSSL 加密扩展的使用.为什么说它是重点中的重点呢?一是 OpenSSL 是目前 PHP 甚 ...

  3. PHP的OpenSSL加密扩展学习(三):证书操作

    关于对称和非对称的加密操作,我们已经学习完两篇文章的内容了,接下来,我们就继续学习关于证书的生成. 生成 CSR 证书签名请求 CSR 是用于生成证书的签名请求,在 CSR 中,我们需要一些 dn 信 ...

  4. PHP的OpenSSL加密扩展学习(二):非对称加密

    上篇文章,我们了解了关于对称和非对称加密的一些相关的理论知识,也学习了使用 OpenSSL 来进行对称加密的操作.今天,我们就更进一步,学习 OpenSSL 中的非对称加密是如何实现的. 生成私钥 通 ...

  5. PHP的openssl加密

    PHP的openssl扩展 openssl扩展使用openssl加密扩展包,封装了多个用于加密解密相关的PHP函数,极大地方便了对数据的加密解密. 常用的函数有: 对称加密相关: string ope ...

  6. windows下OpenSSL加密证书安装步骤与使用方法

    OpenSSL加密证书一般用于签名认证,含私钥和公钥.在Linux系统中,OpenSSL一般是已经安装好了,可以直接使用.而在Windows系统中,是需要安装使用的. 最近在使用支付平台时,用到了Op ...

  7. PHP mcrypt加密扩展使用总结

    在开发中,很多时候我们在前后端交互中需要对一些敏感数据进行一定的加密.PHP中有提供了mcrypt的这样一个加密扩展实现对数据的加密解密. 一.mcrypt扩展的安装 在低版本的PHP中需要在配置文件 ...

  8. linux openssl加密文件

    openssl 支持的加密算法 -aes-128-cbc -aes-128-cfb -aes-128-cfb1 -aes-128-cfb8 -aes-128-ecb -aes-128-ofb -aes ...

  9. PHP安装sodium加密扩展

    1.为什么会用到sodium加密扩展? 最近在做微信服务商相关的开发,主要用的的接口为微信小微商户进件接口.在请求相关接口中,需要对一些敏感字段进行加密,加密过程见https://pay.weixin ...

随机推荐

  1. basket.js 源码分析

    basket.js 源码分析 一.前言 basket.js 可以用来加载js脚本并且保存到 LocalStorage 上,使我们可以更加精准地控制缓存,即使是在 http 缓存过期之后也可以使用.因此 ...

  2. windows 8 设置hyper-v网络设置

    1 windwos 8 设置hyperv 比较简单,和装操作系统都不多做解释.我只多说说网络的设置问题,因为可能装提windows 2008虚拟机,根据网上设置网络的方式都是要不然只能虚拟 机上网 , ...

  3. Spring中配置数据源的4种形式(转)

    原文http://blog.csdn.net/orclight/article/details/8616103       不管采用何种持久化技术,都需要定义数据源.Spring中提供了4种不同形式的 ...

  4. IOS 杂笔-5(NSTimer极浅析)

    1.timer都会对它的target进行retain,我们需要小心对待这个target的生命周期问题,尤其是重复性的timer. 2. timer不是一种实时的机制,会存在延迟,而且延迟的程度跟当前线 ...

  5. opencms忘记Admin用户登录密码解决方案

    不知道现在还有多少人在用opencms: 我今天就是遇到一个问题,很久之前部署的一台opencms服务器,突然忘记密码了,记录下处理方法: 希望对你有帮助: opencms忘记Admin用户登录密码了 ...

  6. [转载] 数据测试常用的Data Profiling方法

    现在对数据质量的要求越来越高,面对一个动辄上亿条数据的报表如何快速对它的数据质量做出分析呢?给大家分享下我们测试时用到的Data Profiling方法. Data Profiling,可以大概翻译“ ...

  7. 给你的Mr.Right画张择偶地图像

    爱一个人就算做不到爱他的全部,至少也应该尊重他的真实,而不是苛求他变成你想要的样子. 娶妻当娶郭芙蓉,经典语录.我是郭芙蓉,我不会武功,我来自江湖,我与众不同.再苦再累,就当自己是二百五,再难再险,就 ...

  8. SQLServer中登录名的用户名配置

    其实这个问题困扰我很久了. 今夏(13.7)实习的时候第一次接触sqlserver 当时是统一安排,按部就班的做就行. 那时候链接数据库用的id是sa. 后来自己做小程序时候举得不管什么都用sa登录好 ...

  9. C#获取HTML文件指定DIV内容

    最近自己找了一个开源的博客网站,放到阿里云上,方便自己发布博客. 我一般把文章发布到博客园和QQ空间,家了这个网站后又要多发布一次,为了省事就做了一个从博客园读取文章的功能: 输入链接URL地址点击提 ...

  10. PHP中IP地址与整型数字互相转换详解

    这篇文章主要介绍了PHP中IP地址与整型数字互相转换详解,本文介绍了使用PHP函数ip2long与long2ip的使用,以及它们的BUG介绍,最后给出自己写的两个算法,需要的朋友可以参考下 IP转换成 ...