国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html
内部邀请码: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 主命令,虽然直接调用加密算法名字也行,例如:

  1. openssl des3 -pass pass:"123" -in a.txt -out a.txt.des3

但是不推荐使用,理由是这种调用形式对于需要硬件引擎的算法不能正常工作(算法,可以由硬件完成)。

-in / -out   filename    输入待加解密的文件,输出加解密后的文件

-pass arg

-pass 提供了几种传入密码的方式。传统是利用-k 选项传入密码的。(关于环境变量,文件描述符,请参阅相关文献)

  1. -pass pass:"123"      #密码是123
  2. -pass pass:123        #密码是123
  3. -pass evn:VAR         #密码从环境变量VAR中去
  4. -pass file:p.txt      #密码从文件p.txt第一行去,不包括换行符,注意DOS格式的^M及回车符。
  5. -pass fd:3            #密码从文件描述符3中读
  6. -pass stdin           #标准输入

-salt     加盐,这是开启的默认选项,使用-nosalt已明确关闭此选项,除非为了兼容性的考虑,否则在新程序中请使用此选项。这是一个神奇的选项,加盐后,相同的明文可以得到不同的密文。默认情况下,盐值是随机生成的,可以使用-S选项明确指定盐值。

  1. E:\OpenSSL\foo>openssl enc -P -des3 -pass pass:123  -in a.txt
  2. salt=669E2AB46DA79FA0
  3. key=EFDB3D1EF18840FF7961E5346FCED81CD34D89286A106F71
  4. iv =2FBE944B72F3CA59
  5. E:\OpenSSL\foo>openssl enc -P -des3 -pass pass:123  -in a.txt
  6. salt=2D89EA80CDE7700E
  7. key=825A74419BADD6A82D6DD9ECD9404397EB5AFC020A75D511
  8. iv =152185CA47D212A0

有了盐值后,相同的明文可以产生不同的密文,那可以解密吗?当然可以。在密文中包含了盐值。例如:

  1. E:\OpenSSL\foo>openssl enc -p -des3 -pass pass:123  -in a.txt -out a.des3salt
  2. salt=A254906CA471C1D4
  3. key=15A12DB86A8A09ABB3C59C1712D865447D96AD1BC940CA56
  4. iv =264E495D7649F9F8
  5. E:\OpenSSL\foo>xxd a.des3salt
  6. 0000000: 5361 6c74 6564 5f5f a254 906c a471 c1d4  Salted__.T.l.q..
  7. 0000010: 952e 1995 b60d 1813                      ........

注意salt和a.des3salt中的a254 906c a471 c1d4是一样子的。我以前用POCO写了个加密程序,加密了一个文件,然后又用openssl加密了那个相同的文件,结果加密后的文件不一样,原来是盐值在搞怪。加盐,就是加调料,所以结果不一样了。

盐值(salt)不需要保密,为什么,看看《应用密码学》吧。

-e / -d         encrypt / decrypt 加解密。默认是加密,-d明确指定是解密。

  1. E:\OpenSSL\foo>openssl enc -d -des3 -pass pass:123  -in a.des3salt -out a.dec
  2. E:\OpenSSL\foo>diff a.txt a.dec
  3. E:\OpenSSL\foo>

-a              对加密后的数据进行base64编码,或解密前,先对数据进行base64解码。 -base64-a选项相同。

  1. E:\OpenSSL\foo>openssl enc -des3 -a -k 123 -in a.txt -out a.des3base64
  2. E:\OpenSSL\foo>openssl enc -des3 -d -a -k 123 -in a.des3base64 -out b.txt
  3. 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还提供了那些算法呢?

  1. E:\OpenSSL\foo>openssl enc -help

这里是官方文档,做的整理

  1. base64             Base 64
  2. bf-cbc             Blowfish in CBC mode
  3. bf                 Alias for bf-cbc
  4. bf-cfb             Blowfish in CFB mode
  5. bf-ecb             Blowfish in ECB mode
  6. bf-ofb             Blowfish in OFB mode
  7. cast-cbc           CAST in CBC mode
  8. cast               Alias for cast-cbc
  9. cast5-cbc          CAST5 in CBC mode
  10. cast5-cfb          CAST5 in CFB mode
  11. cast5-ecb          CAST5 in ECB mode
  12. cast5-ofb          CAST5 in OFB mode
  13. des-cbc            DES in CBC mode
  14. des                Alias for des-cbc
  15. des-cfb            DES in CBC mode
  16. des-ofb            DES in OFB mode
  17. des-ecb            DES in ECB mode
  18. des-ede-cbc        Two key triple DES EDE in CBC mode
  19. des-ede            Two key triple DES EDE in ECB mode
  20. des-ede-cfb        Two key triple DES EDE in CFB mode
  21. des-ede-ofb        Two key triple DES EDE in OFB mode
  22. des-ede3-cbc       Three key triple DES EDE in CBC mode
  23. des-ede3           Three key triple DES EDE in ECB mode
  24. des3               Alias for des-ede3-cbc
  25. des-ede3-cfb       Three key triple DES EDE CFB mode
  26. des-ede3-ofb       Three key triple DES EDE in OFB mode
  27. desx               DESX algorithm.
  28. gost89             GOST 28147-89 in CFB mode (provided by ccgost engine)
  29. gost89-cnt        `GOST 28147-89 in CNT mode (provided by ccgost engine)
  30. idea-cbc           IDEA algorithm in CBC mode
  31. idea               same as idea-cbc
  32. idea-cfb           IDEA in CFB mode
  33. idea-ecb           IDEA in ECB mode
  34. idea-ofb           IDEA in OFB mode
  35. rc2-cbc            128 bit RC2 in CBC mode
  36. rc2                Alias for rc2-cbc
  37. rc2-cfb            128 bit RC2 in CFB mode
  38. rc2-ecb            128 bit RC2 in ECB mode
  39. rc2-ofb            128 bit RC2 in OFB mode
  40. rc2-64-cbc         64 bit RC2 in CBC mode
  41. rc2-40-cbc         40 bit RC2 in CBC mode
  42. rc4                128 bit RC4
  43. rc4-64             64 bit RC4
  44. rc4-40             40 bit RC4
  45. rc5-cbc            RC5 cipher in CBC mode
  46. rc5                Alias for rc5-cbc
  47. rc5-cfb            RC5 cipher in CFB mode
  48. rc5-ecb            RC5 cipher in ECB mode
  49. rc5-ofb            RC5 cipher in OFB mode
  50. aes-[128|192|256]-cbc  128/192/256 bit AES in CBC mode
  51. aes-[128|192|256]      Alias for aes-[128|192|256]-cbc
  52. aes-[128|192|256]-cfb  128/192/256 bit AES in 128 bit CFB mode
  53. aes-[128|192|256]-cfb1 128/192/256 bit AES in 1 bit CFB mode
  54. aes-[128|192|256]-cfb8 128/192/256 bit AES in 8 bit CFB mode
  55. aes-[128|192|256]-ecb  128/192/256 bit AES in ECB mode
  56. 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 加解密的更多相关文章

  1. OpenSSL aes加解密实例+base64编解码

    OpenSSL aes加解密简单实例+base64编解码 #include <stdio.h> #include <string.h> #include <memory. ...

  2. openssl - rsa加解密例程

    原文链接: http://www.cnblogs.com/cswuyg/p/3187462.html openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加 ...

  3. Openssl aes加解密例程 更进一步

    原文链接: http://blog.csdn.net/itmes/article/details/7718427 前面我们用openssl的aes256对称加密算法对16个字节的内存块进行了的加解密运 ...

  4. OpenSSL RSA加解密 (.Net公钥加密/ Linux端私钥解密)

    要求在.Net端生成公钥私钥对. 然后在.Net端使用RSA公钥加密:在Linux端使用RSA私钥解密. 最初的尝试是:.Net端使用RSACryptoServiceProvider; linux端使 ...

  5. openssl rsa 加解密

    <h4>1.openssl进行rsa加密解密</h4>首先介绍下命令台下openssl工具的简单使用:生成一个密钥:<pre lang="c" esc ...

  6. Openssl aes加解密例程

    原文链接: http://blog.csdn.net/itmes/article/details/7714854 假设我们已经下载了 openssl的源码,并成功编译,设置好了编程环境. 我们现在来看 ...

  7. PHP openssl DES加解密

    不说废话上代码 加密 $str_padded = 'android'; //要加密的字符串 $iv = "12345678"; 偏移值 cbc必填 "\x01\x02\x ...

  8. PHP使用OPENSSL RSA加密解密数据

    加密数据有很多种方法,今天我们来看一下OPENSSL RSA的加密办法. 1.首先得安装php的openssl扩展 php -m | grep openssl 执行以上命令,确保已经安装了openss ...

  9. Openssl 加解密文件

    使用openssl 的命令行进行文件的加密与解密过程,主要有两种方式: openssl 指定加密/解密算法加密 openssl 指定公钥/私钥文件加密 openssl 指定加密/解密算法加密 To E ...

随机推荐

  1. python 简单示例说明os.walk和os.path.walk的不同

    import os,os.path def func(arg,dirname,names): for filespath in names: print os.path.join(dirname,fi ...

  2. ZOJ 2676 Network Wars ★(最小割算法介绍 && 01分数规划)

    [题意]给出一个带权无向图,求割集,且割集的平均边权最小. [分析] 先尝试着用更一般的形式重新叙述本问题.设向量w表示边的权值,令向量c=(1, 1, 1, --, 1)表示选边的代价,于是原问题等 ...

  3. Reduce对Pig作业性能的影响

    Amber Zhao  Wed, Feb 25 2015 3:36 AM 很多用户在使用HDInsight的Pig功能时,发现有时很简单一个Pig Latin的relation会花费很长时间执行,当H ...

  4. InstallShield高级应用--检查是否安装ORACLE或SQL Server

    InstallShield高级应用--检查是否安装ORACLE或SQL Server   实现原理:判断是否存在,是通过查找注册表是否含有相应标识来判断的. 注意:XP与WIN7系统注册表保存方式不一 ...

  5. Simple XML

    官网:http://simple.sourceforge.net/home.php 截止目前最新版本:simple-xml-2.7.1.jar 特点: jar lib文件只有360K左右的大小 它的使 ...

  6. POJ3279 Fliptile 枚举+简单搜索

    题意:一个矩阵,每个点1或0,然后每次翻一个点,它周围上下左右(包括自己)1->0,0->1,问最少翻几次可以矩阵全是0,忽略题目说的字典序 分析:枚举第一行所有的情况,然后下面几行也随之 ...

  7. VS2008编写MFC程序--使用opencv2.4()

    开始记录VS2008环境下学习OPENCV2.4 头文件: #pragma once #include "CvvImage.h" #include "opencv/cv. ...

  8. Mac OS 终端常用命令【搜藏】

    基础概念 OS X 采用的Unix文件系统,所有文件都挂在跟目录“ /” 下面,所以不在要有Windows 下的盘符概念.比如什么“C:”你在桌面上看到的硬盘都挂在 /Volumes 下.比如接上个叫 ...

  9. MSP430F149流水灯闪烁以及数码管的显示

    今天下午写了一个流水灯闪烁的实验,总的来说,不难,因为这块板子集合的电路图没有上一块那么复杂,所以总的来说,还是比较顺手,开始的时候,出现流水灯没有流转的现象,原来是没有加入延时函数,后来经过调整,结 ...

  10. jQuery轻量级京东图片轮播代码等

    http://sc.chinaz.com/jiaoben/jiaodiantu.html jQuery轻量级京东图片轮播代码   查看全图点击预览 顶(17)踩(4)报错评论(0)下载地址 更新时间: ...