openssl enc 加解密
内部邀请码:C8E245J (不写邀请码,没有现金送)
国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为“中国PE第一股”,市值超1000亿元。
地址: http://blog.csdn.net/fym0121/article/details/7984733
介绍
enc - 对称加密例程,使用对称密钥对数据进行加解密,特点是速度快,能对大量数据进行处理。算法有流算法和分组加密算法,流算法是逐字节加密,数据经典算法,但由于其容易被破译,现在已很少使用;分组加密算法是将数据分成固定大小的组里,然后逐组进行加密,比较广为人知的是DES3。分组算法中又有ECB,CBC,CFB,OFB,CTR等工作模式,其中默认选CBC工作模式。
语法
openssl enc -ciphername[-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id]
enc 主命令,虽然直接调用加密算法名字也行,例如:
- openssl des3 -pass pass:"123" -in a.txt -out a.txt.des3
但是不推荐使用,理由是这种调用形式对于需要硬件引擎的算法不能正常工作(算法,可以由硬件完成)。
-in / -out filename 输入待加解密的文件,输出加解密后的文件
-pass arg
-pass 提供了几种传入密码的方式。传统是利用-k 选项传入密码的。(关于环境变量,文件描述符,请参阅相关文献)
- -pass pass:"123" #密码是123
- -pass pass:123 #密码是123
- -pass evn:VAR #密码从环境变量VAR中去
- -pass file:p.txt #密码从文件p.txt第一行去,不包括换行符,注意DOS格式的^M及回车符。
- -pass fd:3 #密码从文件描述符3中读
- -pass stdin #标准输入
-salt 加盐,这是开启的默认选项,使用-nosalt已明确关闭此选项,除非为了兼容性的考虑,否则在新程序中请使用此选项。这是一个神奇的选项,加盐后,相同的明文可以得到不同的密文。默认情况下,盐值是随机生成的,可以使用-S选项明确指定盐值。
- E:\OpenSSL\foo>openssl enc -P -des3 -pass pass:123 -in a.txt
- salt=669E2AB46DA79FA0
- key=EFDB3D1EF18840FF7961E5346FCED81CD34D89286A106F71
- iv =2FBE944B72F3CA59
- E:\OpenSSL\foo>openssl enc -P -des3 -pass pass:123 -in a.txt
- salt=2D89EA80CDE7700E
- key=825A74419BADD6A82D6DD9ECD9404397EB5AFC020A75D511
- iv =152185CA47D212A0
有了盐值后,相同的明文可以产生不同的密文,那可以解密吗?当然可以。在密文中包含了盐值。例如:
- E:\OpenSSL\foo>openssl enc -p -des3 -pass pass:123 -in a.txt -out a.des3salt
- salt=A254906CA471C1D4
- key=15A12DB86A8A09ABB3C59C1712D865447D96AD1BC940CA56
- iv =264E495D7649F9F8
- E:\OpenSSL\foo>xxd a.des3salt
- 0000000: 5361 6c74 6564 5f5f a254 906c a471 c1d4 Salted__.T.l.q..
- 0000010: 952e 1995 b60d 1813 ........
注意salt和a.des3salt中的a254 906c a471 c1d4是一样子的。我以前用POCO写了个加密程序,加密了一个文件,然后又用openssl加密了那个相同的文件,结果加密后的文件不一样,原来是盐值在搞怪。加盐,就是加调料,所以结果不一样了。
盐值(salt)不需要保密,为什么,看看《应用密码学》吧。
-e / -d encrypt / decrypt 加解密。默认是加密,-d明确指定是解密。
- E:\OpenSSL\foo>openssl enc -d -des3 -pass pass:123 -in a.des3salt -out a.dec
- E:\OpenSSL\foo>diff a.txt a.dec
- E:\OpenSSL\foo>
-a 对加密后的数据进行base64编码,或解密前,先对数据进行base64解码。 -base64与-a选项相同。
- E:\OpenSSL\foo>openssl enc -des3 -a -k 123 -in a.txt -out a.des3base64
- E:\OpenSSL\foo>openssl enc -des3 -d -a -k 123 -in a.des3base64 -out b.txt
- E:\OpenSSL\foo>diff a.txt b.txt
-A 如果指定-a 选项,在每一行上进行base64处理。
-k / -kfile -k,传统输入密码的方式,-k 123 相当与 -pass pass:123 。-kfile p.txt 相当于 -pass file:p.txt。
-K key 加密真正使用的key。这和-k 和 -pass有什么区别呢? 其实我们输入的密码并不是加密时使用的密钥,对于分组加密算法来说,密钥是固定的,有64/128/256等,我们也经常见文献里写着,密钥多少多少位。我们输入的密码,在加密算法启动前,会经过运算,得到固定长度用于加密的key,然后在加密。我们可以在选项中手动指定key,key的格式是16进制,算法的不同,key的长度也会不同。
-iv IV IV是初始化向量,格式是16进制。在分组加密算法中,对第一组数据加密时,我们可以是用初始化向量对其进行处理,已隐藏明文的统计特性。参加下面的工作模式。
-p / -P print打印出key和iv值。-P只打印出key和iv值,而不进行加解密运算。参考-salt
算法
除了上面提到的des3外,openssl还提供了那些算法呢?
- E:\OpenSSL\foo>openssl enc -help
这里是官方文档,做的整理
- base64 Base 64
- bf-cbc Blowfish in CBC mode
- bf Alias for bf-cbc
- bf-cfb Blowfish in CFB mode
- bf-ecb Blowfish in ECB mode
- bf-ofb Blowfish in OFB mode
- cast-cbc CAST in CBC mode
- cast Alias for cast-cbc
- cast5-cbc CAST5 in CBC mode
- cast5-cfb CAST5 in CFB mode
- cast5-ecb CAST5 in ECB mode
- cast5-ofb CAST5 in OFB mode
- des-cbc DES in CBC mode
- des Alias for des-cbc
- des-cfb DES in CBC mode
- des-ofb DES in OFB mode
- des-ecb DES in ECB mode
- des-ede-cbc Two key triple DES EDE in CBC mode
- des-ede Two key triple DES EDE in ECB mode
- des-ede-cfb Two key triple DES EDE in CFB mode
- des-ede-ofb Two key triple DES EDE in OFB mode
- des-ede3-cbc Three key triple DES EDE in CBC mode
- des-ede3 Three key triple DES EDE in ECB mode
- des3 Alias for des-ede3-cbc
- des-ede3-cfb Three key triple DES EDE CFB mode
- des-ede3-ofb Three key triple DES EDE in OFB mode
- desx DESX algorithm.
- gost89 GOST 28147-89 in CFB mode (provided by ccgost engine)
- gost89-cnt `GOST 28147-89 in CNT mode (provided by ccgost engine)
- idea-cbc IDEA algorithm in CBC mode
- idea same as idea-cbc
- idea-cfb IDEA in CFB mode
- idea-ecb IDEA in ECB mode
- idea-ofb IDEA in OFB mode
- rc2-cbc 128 bit RC2 in CBC mode
- rc2 Alias for rc2-cbc
- rc2-cfb 128 bit RC2 in CFB mode
- rc2-ecb 128 bit RC2 in ECB mode
- rc2-ofb 128 bit RC2 in OFB mode
- rc2-64-cbc 64 bit RC2 in CBC mode
- rc2-40-cbc 40 bit RC2 in CBC mode
- rc4 128 bit RC4
- rc4-64 64 bit RC4
- rc4-40 40 bit RC4
- rc5-cbc RC5 cipher in CBC mode
- rc5 Alias for rc5-cbc
- rc5-cfb RC5 cipher in CFB mode
- rc5-ecb RC5 cipher in ECB mode
- rc5-ofb RC5 cipher in OFB mode
- aes-[128|192|256]-cbc 128/192/256 bit AES in CBC mode
- aes-[128|192|256] Alias for aes-[128|192|256]-cbc
- aes-[128|192|256]-cfb 128/192/256 bit AES in 128 bit CFB mode
- aes-[128|192|256]-cfb1 128/192/256 bit AES in 1 bit CFB mode
- aes-[128|192|256]-cfb8 128/192/256 bit AES in 8 bit CFB mode
- aes-[128|192|256]-ecb 128/192/256 bit AES in ECB mode
- aes-[128|192|256]-ofb 128/192/256 bit AES in OFB mode
注意上面的ecb,cbc,ofb,cfb等,这些是分组算法的工作模式,默认为cbc。
ECB是最简单的,如图
CBC是应用最广泛的,如图
在加密第一组数据的时候,使用了IV,且每组数据加加密前都与前组加密后的数据进行异或,提高了安全性。不同的IV可以产生不同的密文(这和不同的salt可以产生不同的密文,应该不矛盾,本人菜鸟^_^),这样明文的统计特征会在密文中消散掉。IV不需要保密。
openssl enc 加解密的更多相关文章
- OpenSSL aes加解密实例+base64编解码
OpenSSL aes加解密简单实例+base64编解码 #include <stdio.h> #include <string.h> #include <memory. ...
- openssl - rsa加解密例程
原文链接: http://www.cnblogs.com/cswuyg/p/3187462.html openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加 ...
- Openssl aes加解密例程 更进一步
原文链接: http://blog.csdn.net/itmes/article/details/7718427 前面我们用openssl的aes256对称加密算法对16个字节的内存块进行了的加解密运 ...
- OpenSSL RSA加解密 (.Net公钥加密/ Linux端私钥解密)
要求在.Net端生成公钥私钥对. 然后在.Net端使用RSA公钥加密:在Linux端使用RSA私钥解密. 最初的尝试是:.Net端使用RSACryptoServiceProvider; linux端使 ...
- openssl rsa 加解密
<h4>1.openssl进行rsa加密解密</h4>首先介绍下命令台下openssl工具的简单使用:生成一个密钥:<pre lang="c" esc ...
- Openssl aes加解密例程
原文链接: http://blog.csdn.net/itmes/article/details/7714854 假设我们已经下载了 openssl的源码,并成功编译,设置好了编程环境. 我们现在来看 ...
- PHP openssl DES加解密
不说废话上代码 加密 $str_padded = 'android'; //要加密的字符串 $iv = "12345678"; 偏移值 cbc必填 "\x01\x02\x ...
- PHP使用OPENSSL RSA加密解密数据
加密数据有很多种方法,今天我们来看一下OPENSSL RSA的加密办法. 1.首先得安装php的openssl扩展 php -m | grep openssl 执行以上命令,确保已经安装了openss ...
- Openssl 加解密文件
使用openssl 的命令行进行文件的加密与解密过程,主要有两种方式: openssl 指定加密/解密算法加密 openssl 指定公钥/私钥文件加密 openssl 指定加密/解密算法加密 To E ...
随机推荐
- 【.Net免费公开课】--授技.Net中的高帅富技术-"工作流"
课程简介 免费公开课主题: .Net中的高帅富技术-“工作流” 公开课开课时间: 10月17日 19:30--21:30 公开课YY频道: 85155393 (重要:公开课QQ ...
- python学习笔记一--字符串
一.字符串: (一)字符串里单个元素的操作 1. 单个字符(元素)的序列组合. 2. 序列:单个字符的位置 3. 序列的操作:内置函数len获取长度,加位置索引 4. 获取字符串的里的元素:正向索引+ ...
- 抱怨IT公司人才缺乏?留住现有人才方是正途
摘要:员工的好坏决定着IT公司的未来,可很多IT公司在抱怨之时自己的人才却正在流失,如何留住现有的优秀员工?国外知名经理人Sharon Florentine建议:改善自己的管理.让员工不断地学习.创建 ...
- Fody
Fody https://github.com/Fody/Fody/ 有空还要看下怎么实现的.
- tap,touch,touchstart,事件与click事件的区别
根据源码所见, 移动端为了将将单击事件更加灵敏,所以现在的JQM,ST...框架都将JS单击事件封装成tap,或者touch或者touchstart事件, 其实现本质是将click触发多次,以打成移动 ...
- JS框架整理
1. Dojo (演示地址) Dojo是一个强大的面向对象JavaScript框架.主要由三大模块组成:Core.Dijit.DojoX.Core提供ajax,events,packaging,CSS ...
- JPA简单知识
,JPA(Java Persistence API):通过注解或XML描述对象--关系表的映射关系,并将运行期的实体对象持久化到数据库中. JPA是一套规范,不是某个ORM产品,它主要包括以下3方面的 ...
- 访问WEB-INF目录中的JSP文件
方法1:本来WEB-INF中的jsp就是无法通过地址栏访问的.所以安全.如果说你要访问这个文件夹中的jsp文件需要在项目的web.xml文件中去配置servlet格式差不多的配置就ok了.如下: 访问 ...
- 017QTP 描述性编程的使用方法
一.什么时候使用描述性编程 在测试过程中,有些界面元素是动态出现或动态变化的,在录制的时候并没有添加到对象库中 二.描述性编程的运行原理 用描述性编程编写的测试脚本在运行时,QTP会使用测试脚本中给出 ...
- c#: 解析json, 转成xml, 简单方便
没看到.net framework中有这样的功能, 懒得到处找了, 索性花点时间自己写一个 /* * Created by SharpDevelop. * Date: 2013/6/24 * User ...