在工作中经常会遇到需要字符串加解密,尤其是和linux操作系统打交道的,有些配置文件里的字符串需要加密,读取的时候再解密,下面是shell里openssl的应用。
先介绍一下SSL和OpenSSL
SSL是Secure Socket Layer(安全套接字层)的缩写,它是一种提供秘密性传输的协议。OpenSSL是一个基于密码学的安全开发包,具有优秀的跨平台性。它的功能主要包括三个部分:密码算法库、SSL协议库、应用程序。
OpenSSL指令简介
就像 ls 命令后面跟的选项 -l 、-a等一样,OpenSSL后面也有很多指令,比如enc、gendsa、genrsa、passwd等,它们实现了不同的功能,在此就不细说了,可以查看OpenSSL相关资料。主要说说 enc 指令。
enc是对称加密算法工具,它能把数据用不同的对称加密算法来加密或解密,还能把加密或解密的结果进行base64编码。enc指令后面也有很多选项,下面列出来一些。
-in filename 要加/解密的输入文件,缺省为标准输入。
-out filename 要加/解密的输出文件,缺省为标准输出。
-pass arg 输入文件如果有密码保护,在这里输入密码。
-salt 盐值,随机生成的一个字符串,可以包含大小写字母、数字、字符,位数可以根据要求而不同(也有人说是固定6位随机数,只能是0~9,a~f),使用不同的盐值最终的密文是不一样的。一般在加密之前把盐值放在字符串前面,然后再加密,但是需要记录此值。
-nosalt 想和openssl 0.9.5兼容,必须带有。
-e 把输入数据加密(默认带有,可省略)。
-d 把输入数据解密(不可省略)。
-k password 已过时,为了和以前的版本兼容,现在用-key代替。
-kfile filename 同上,被passin代替。
-k key 以16进制表示的密码。
-iv IV 同上。
-p 打印出使用的密码。
-P 同上,但打完后马上退出。
0.9.5以后的版本,-salt必须被设置的,如果不写默认是有的。否则很容易被破解(字典***)。流加密算法也很容易被破解(加密算法分为块加密和流加密)。
参考程序:加密
- #用法encstr str key
- function encstr()
- {
- local str_need_enc=$1
- local str_key=$2
- local result=""
- if [ "X" = "X$str_need_enc" ];then
- return 1
- fi
- if [ "X" = "X$str_key" ];then
- return 2
- fi
- result=`echo $str_need_enc |openssl enc -aes-256-cfb -e -base64 -k $str_key -salt`
- echo $result
- return 0
- }
解密
- #用法decstr str key
- function decstr()
- {
- local str_need_dec=$1
- local str_key=$2
- local result=""
- if [ "X" = "X$str_need_dec" ];then
- return 1
- fi
- if [ "X" = "X$str_key" ];then
- return 2
- fi
- result=`echo $str_need_dec |openssl enc -aes-256-cfb -d -base64 -k $str_key`
- echo $result
- return 0
- }
转载于:https://blog.51cto.com/yaotiaochimei/861417