解析php php_openssl.dll的作用


Posted in PHP onJuly 01, 2013

一.openssl简介
数据加密是信息信息传输中的一个重要组成部分.任何信息都以明文方式传输,确实是个很不安全的做法.所以,
需要对数据进行加密.将明文数据转换为密文数据,再进行传输.

OpenSSL是一套用于SSL/TLS协议的加密工具,其作用有:
1.生成私有密钥.
2.生成证书,即数字签名证书,它包含一个公有密钥,可以用来单向的加密和解密数据.即,使用公钥加密的数据,只能使用
私有密钥解密.使用私钥加密的数据,可以使用公钥来解密.
3.计算信息摘要.
4.SSL/TLS客户端和服务器端测试.
5.处理S/MIME标记和邮件的加密.

二.加密技术简介.
加密,即将明文数据转换为密文数据的过程.以起到对明文保密的作用.
加密算法: 数据加密过程所采用的一种运算算法.用于将明文转换为密文.
密钥: 加密算法通过与密钥进行某种运算,将明文数据进行加密,生成加密数据.解密时,加密算法通过密钥,
将加密数据再转换为明文数据.
现今的加密技术,加密算法是公开的,即所有人都知道加密所采用的运算方式.但只有使用密钥才能进行
对密文的解密.所以,密钥的保护,是数据安全的核心.

三.openssl工具使用简介
1.私有密钥生成方法

生成私有密钥,可以使用不同的数字签名算法.下面分别介绍;

#采用DSA算法
$ openssl dsaparam -noout -out dsakey0.pem -genkey 1024
#采用RSA算法
$ openssl genrsa -out rsakey0.pem 1024
#采用RSA算法,并使用密码保护.在生成私钥时,需要输入一个密码,用于保护私钥.
#在使用这个私钥进行加/解密操作时,也需要输入这个密码.
$ openssl genrsa -des3 -out rsakey1.pem 10242.公用密钥的生成方法
根据私钥来生成公钥
#生成dsa算法的公钥
$ openssl dsa -in dsakey0.pem -pubout -out dsakey0-pub.pem
#生成rsa算法的公钥
$ openssl rsa -in rsakey0.pem -pubout -out rsakey0-pub.pem3.自签名证书的生成方法
#产生DSA算法的证书
$ openssl req -x509 -key dsakey0.pem -days 365 -out mycert-dsa.pem -new
#产生RSA算法的证书
$ openssl req -x509 -key rsakey0.pem -days 365 -out mycert-rsa.pem -new

4.使用证书进行邮件加密
我们的明文信件内容:

$ cat test.txt
111111
222222
333333
444444
aaaaaa
使用证书对明文信件进行加密,输出到etest.txt文件:
$ openssl smime   -encrypt -in test.txt -out etest.txt mycert-rsa.pem查看加密后的密文内容:

$ cat etest.txt
MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/x-pkcs7-mime; smime-type=enveloped-data; name="smime.p7m"
Content-Transfer-Encoding: base64

MIIBYAYJKoZIhvcNAQcDoIIBUTCCAU0CAQAxgewwgekCAQAwUjBFMQswCQYDVQQG
EwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lk
Z2l0cyBQdHkgTHRkAgkAr71mh4NRX/UwDQYJKoZIhvcNAQEBBQAEgYCbrA1WBwQK
Zj7TcNtrxiDzqMBc/Lu063SLKvBK6mQMqT+npFOOFtzIKdFVkldH0YyQhMZDSCyq
YUtGwOaDw6Jn0AHRt64UwPOKoaeL9RVqp9vgtiFC/uXis5UeyZCWS1z7Jsih8Aa+
Da/DQN0sOCX85OdK/TDewNx8mTaYBbVf4jBZBgkqhkiG9w0BBwEwGgYIKoZIhvcN
AwIwDgICAKAECNxsgiJ2s+1ugDC6JknPL+rDYBCddcyPH+bMYjqrUP0hE/GQ5WSj
sv8CDkOUdvY5XG440yiAL3Z3ysI=使用私钥进行解密,输出到dtest.txt文件:

$ openssl smime  -decrypt -in etest.txt -inkey rsakey0.pem  -out dtest.txt查看解密后的信件内容,与原明文信件内容完全一致.

$ cat dtest.txt
111111
222222
333333
444444
aaaaaa

5.简单的文件加密
明文文件内容:

$ cat test.txt
1
22
333
4444
55555
Hello加密明文文件,输出为test.enc文件,输入”123123”作为加密密码:

$ openssl enc -aes-256-cbc -salt -in test.txt -out test.enc
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:对密文进行解密,输入”123123”作为解密密码:

$ openssl enc -d -aes-256-cbc -in test.enc
enter aes-256-cbc decryption password:
1
22
333
4444
55555
Hello

6.简单的字符串加密
采用base64方式进行加密:

$ echo "encode me" | openssl enc -base64
ZW5jb2RlIG1lCg==解密时,需要知道加密算法,才可解密:

$ echo "ZW5jb2RlIG1lCg==" | openssl enc -base64 -d
encode me

7.SSL客户端和服务器的测试
使用私钥和证书启动SSL服务器,"-www”的作用是,当客户端连接服务器时,发送一个状态信息网页到客户端.

openssl s_server -key mykey.pem -cert mycert.pem -www连接SSL服务器到,客户端会获得服务器的证书:

openssl s_client -connect localhost:4433

PHP 相关文章推荐
模拟xcopy的函数
Oct 09 PHP
用PHP中的 == 运算符进行字符串比较
Nov 26 PHP
Zend的MVC机制使用分析(二)
May 02 PHP
部署PHP项目应该注意的几点事项分享
Dec 20 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
Jun 30 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
Sep 10 PHP
PHP分页类集锦
Nov 18 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
Jun 13 PHP
php投票系统之增加与删除投票(管理员篇)
Jul 01 PHP
PHP生成唯一ID之SnowFlake算法
Dec 17 PHP
php输出图像的方法实例分析
Feb 16 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
Apr 02 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
Jul 01 #PHP
浅析PKI加密解密 OpenSSL
Jul 01 #PHP
php pki加密技术(openssl)详解
Jul 01 #PHP
使用php实现快钱支付功能(涉及到接口)
Jul 01 #PHP
在wamp集成环境下升级php版本(实现方法)
Jul 01 #PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
Jul 01 #PHP
php5.3 注意事项说明
Jul 01 #PHP
You might like
虫族 Zerg 热键控制
2020/03/14 星际争霸
咖啡界又出新概念,无需咖啡豆的分子咖啡
2021/03/03 咖啡文化
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
2013/04/22 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
js对列表中第一个值处理与jsp页面对列表中第一个值处理的区别详解
2013/11/05 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
JavaScript实现图片瀑布流和底部刷新
2017/01/02 Javascript
jQuery读取XML文件的方法示例
2017/02/03 Javascript
AngularJS集合数据遍历显示的实例
2017/12/27 Javascript
vue生命周期的探索
2019/04/03 Javascript
封装微信小程序http拦截器过程解析
2019/08/13 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
2019/12/22 Javascript
基于JavaScript实现轮播图效果
2021/01/02 Javascript
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
Python使用新浪微博API发送微博的例子
2014/04/10 Python
介绍Python中的__future__模块
2015/04/27 Python
OpenCV-Python 摄像头实时检测人脸代码实例
2019/04/30 Python
Python 生成短8位唯一id实战教程
2021/01/13 Python
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
多视角3D逼真HTML5水波动画
2016/03/03 HTML / CSS
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
一些PHP的面试题
2015/05/06 面试题
大学生的网上创业计划书
2013/12/31 职场文书
计算机专业优秀大学生自我总结
2014/01/21 职场文书
2014年电工工作总结
2014/11/20 职场文书
小学生勤俭节约倡议书
2015/04/29 职场文书
复活读书笔记
2015/06/29 职场文书
初中班主任工作随笔
2015/08/15 职场文书
详解MongoDB的条件查询和排序
2021/06/23 MongoDB
CSS实现单选折叠菜单功能
2021/11/01 HTML / CSS
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python