2.4openssl加密

Openssl是一个开源的用以实现SSL协议的产品,它主要包括了三个部分:密码算法库、应用程序、SSL协议库。Openssl实现了SSL协议所需要的大多数算法。

OpenSSL的应用程序主要包括密钥生成、证书管理、格式转换、数据加密和签名、SSL测试以及其它辅助配置功能。

 对称加密

 OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。

 非对称加密

 OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法椭圆曲线算法(EC)。DH算法一般用于密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。

 信息摘要

 OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA算法事实上包括了SHA和SHA1两种信息摘要算法。此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1。

 

 下面我将单介绍使用Openssl进行文件的对称加密操作。

一、Openssl支持的加密算法有很多,简单列举如下:

-aes-128-cbc -aes-128-cfb -aes-128-cfb1

-aes-128-cfb8 -aes-128-ecb -aes-128-ofb

-aes-192-cbc -aes-192-cfb -aes-192-cfb1

-aes-192-cfb8 -aes-192-ecb -aes-192-ofb

-aes-256-cbc -aes-256-cfb -aes-256-cfb1

-aes-256-cfb8 -aes-256-ecb -aes-256-ofb

-aes128 -aes192 -aes256

-bf -bf-cbc -bf-cfb

-bf-ecb -bf-ofb -blowfish

-cast -cast-cbc -cast5-cbc

-cast5-cfb -cast5-ecb -cast5-ofb

-des -des-cbc -des-cfb

-des-cfb1 -des-cfb8 -des-ecb

-des-ede -des-ede-cbc -des-ede-cfb

-des-ede-ofb -des-ede3 -des-ede3-cbc

-des-ede3-cfb -des-ede3-ofb -des-ofb

-des3 -desx -desx-cbc

-rc2 -rc2-40-cbc -rc2-64-cbc

-rc2-cbc -rc2-cfb -rc2-ecb

-rc2-ofb -rc4 -rc4-40

-rc5 -rc5-cbc -rc5-cfb -rc5-ecb -rc5-ofb等等。

二、Openssl加密指令语法:

openssl enc -jmlxname [-in filename] [-out filename] [-pass arg] [-e]

[-d] [-a] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-p]

[-P] [-bufsize number] [-v][-nopad] [-debug] [-none] [id]

说明:

-jmlxname选项:加密算法,Openssl支持的算法在上面已经列出了,你只需选择其中一种算法即可实现文件加密功能。

-in选项:输入文件,对于加密来说,输入的应该是明文文件;对于解密来说,输入的应该是加密的文件。该选项后面直接跟文件名。

-out选项:输出文件,对于加密来说,输出的应该是加密后的文件名;对于解密来说,输出的应该是明文文件名。

-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           #标准输入  

-k / -kfile选项: -k,传统输入密码的方式,-k 123321 相当与 -pass pass:123321 。   -kfile p.txt 相当于 -pass file:p.txt。

-K key选项: 加密真正使用的key。这和-k 和 -pass有什么区别呢? 其实我们输入的密码并不是加密时使用的密钥,对于分组加密算法来说,密钥是固定的,有64/128/256等,我们也经常见文献里写着,密钥多少多少位。我们输入的密码,在加密算法启动前,会经过运算,得到固定长度用于加密的key,然后在加密。我们可以在选项中手动指定key,key的格式是16进制,算法的不同,key的长度也会不同。

-e选项:实现加密功能(不使用-d选项的话默认是加密选项)。

-d选项:实现解密功能。

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

-IV选项:IV是初始化向量,格式是16进制。在分组加密算法中,对第一组数据加密时,我们可以是用初始化向量对其进行处理,已隐藏明文的统计特性。输入初始变量(不使用该选项,Openssl会使用口令自动提取初始变量)。

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

-p选项:打印出加密算法使用的加密密钥。-P只打印出key和iv值,而不进行加解密运算。

-bufsize number:设置I/O操作的缓冲区大小,因为一个文件可能很大,每次读取的数据是有限的。

 -v:打印附加信息值。

 -nopad:没有数据填充(主要用于非对称加解密操作)。

 -debug:打印调试信息值。

 -none:不对数据进行加解密操作。

 -id:硬件引擎。

 三、案例:

1. 使用aes-128-cbc算法加密文件:

openssl enc -aes-128-cbc -in install.log -out enc.log

(注:这里install.log是你想要加密的文件,enc.log是加密后的文件,回车后系统会提示你输入口令)

2. 解密刚刚加密的文件:

openssl enc -d -aes-128-cbc -in enc.log -out install.log

(注:enc.log是刚刚加密的文件,install.log是解密后的文件,-d选项实现解密功能)

3.加密文件后使用BASE64格式进行编码:

openssl enc -aes-128-cbc -in install.log -out enc.log -a

4.使用多种口令输入方式加密:

openssl enc -des-ede3-cbc -in install.log -out enc.log -pass pass:123321

(这种方式的好处是你可以把它写入到脚本中,自动完成加密功能,不使用pass选项默认系统会提示输入口令,并且确认,是需要人工操作的)

四、Openssl的功能还远不只于此,感兴趣的朋友可以参考Openssl的手册学习。在Linux系统中你可以通过:man openssl 快速获得帮助文件。

 例:对文件file.tar.gz进行加密,密码为123321

openssl des3 -salt -k 123321 -in file.tar.gz -out file.tar.gz.des3

 对file.tar.gz.des3 解密

openssl enc -des3 -d -in file.tar.gz.des3 -out file.tar.gz

 

 
posted on 2017-05-30 16:19  思_行  阅读(217)  评论(0编辑  收藏  举报