原地址: https://www.cnblogs.com/huyihao/p/6082765.html

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的核心组件。

转载于:https://blog.51cto.com/benchmarking/2397150

PHP openssl加密扩展使用总结相关推荐

  1. php加密 dll扩展,PHP的openssl加密扩展使用小结(推荐)

    引言 互联网的发展史上,安全性一直是开发者们相当重视的一个主题,为了实现数据传输安全,我们需要保证:数据来源(非伪造请求).数据完整性(没有被人修改过).数据私密性(密文,无法直接读取)等.虽然现在已 ...

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

    PHP的OpenSSL加密扩展学习(三):证书操作 关于对称和非对称的加密操作,我们已经学习完两篇文章的内容了,接下来,我们就继续学习关于证书的生成. 生成 CSR 证书签名请求 CSR 是用于生成证 ...

  3. beast linux加密,PHP-Beast v2.2发布,PHP源码加密扩展

    PHP-Beast v2.2发布,PHP源码加密扩展 发布时间:2016-07-08 14:53:04来源:红联作者:baihuo PHP-Beast v2.2 发布了,此版本主要增加了以下功能: 加 ...

  4. aes解压命令 linux,Linux使用tar和openssl加密和解密文件

    欢迎,来自IP地址为:110.247.246.119 的朋友 如果系统中保存有机密和敏感信息,那么采用额外的加密防护措施是十分必要的,尤其是这些文件需要在网络上传输时,对文件进行加密就显得十分重要. ...

  5. pg加密扩展的安装_postgresql的加密扩展插件pgcrypto

    近期测试了一下postgresql的加密扩展插件pgcrypto的aes加密 安装加密扩展插件:pgcrypto 在主节点上安装 create extension pgcrypto; aes加解密函数 ...

  6. 使用OpenSSL加密,使用Java解密,使​​用OpenSSL RSA公钥

    抽象 在2017年,我撰写了一个由三部分组成的系列文章,内容涉及选择最佳的哈希和加密算法. 在对该系列进行研究时,我学到了很多有关哈希和加密的知识. 我学到的最重要的事情是,尽管我必须对如何使用最安全 ...

  7. php-5.2.6安装,php5.2.6安装openssl.o扩展,make时报错?

    问题: 调试支付宝支付时报错:Fatal error: Call to undefined function openssl_get_privatekey()` 在网上查了 说是没有安装openssl ...

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

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

  9. Linux运维 第三阶段 (一) 网络配置及openssl加密

    Linux运维 第三阶段 (一) 网络配置及openssl加密 主机接入网络:IP,netmask,gateway,hostname,DNS1,DNS2,DNS3,route,dhcp(dynamic ...

  10. openssl加密解密

    openssl加密解密 常用加密方式 对称加密:发送方和接受方使用同样的一把私钥,私钥用于加密和解密 非对称加密:有一把公钥,有一把私钥,使用公钥加密,只能使用私钥进行解密 但非对称加密比对称加密慢, ...

最新文章

  1. 某书2018面试题之最长对称子串
  2. Google 的 QUIC 华丽转身成为下一代网络协议: HTTP/3.0
  3. linux定位so快捷方式_Linux动态库(.so)搜索路径 | 学步园
  4. 微软CRM 2011 Beta 新功能之二:不同组织不同基本语言
  5. PyTorch 1.0 中文文档:多进程最佳实践
  6. java c 事件对比_javacsript绑定事件的三种方式与各自特点
  7. VS2012统计代码量
  8. 《Systems Performance》阅读笔记及收获
  9. Maven整合Spring与Solr
  10. React Hooks 实战 CNode 社区移动端网站
  11. ps 抠图 色彩范围
  12. MATLAB三维图像与三重积分
  13. android记账本折线图_小熊记账本
  14. 诺基亚6300手机游戏下载_回忆杀!重温那些年你一定玩过的经典手机游戏,快看你玩过几个?...
  15. java非主流火星文输入法_我爱火星文_火星文输入法
  16. 什么是TLB ?(转载)
  17. html表单的基本结构
  18. CentOS 6.3下Samba服务器的安装与配置
  19. “飞象”已露国家级工业互联网平台之像
  20. 论文翻译:《Phosvardeep:使用序列信息对磷酸变化的深度学习预测》

热门文章

  1. 如何高效工作,享受品质生活?看看少数派的经验总结吧
  2. 收尾决胜武器:软文常用的9个收尾方法
  3. 软件开发的需求分析样例
  4. 3.概率分布函数与概率密度函数
  5. 3. tensorflow2实现两总体样本尺度、位置、分布检验问题 ——python实战
  6. Count-Min Sketch 算法
  7. sql增删改查_5分钟GET全栈开发 - 增删改查的取经之路
  8. dns重定向_怎样理解DNS缓存投毒?
  9. 动画算计算机专业吗,能够定义角色功能的计算机动画系统属于。 (1.0分)
  10. h5跳转小程序页面url_小程序和h5跳转