shell字符串加解密

    在工作中经常会遇到需要字符串加解密,尤其是和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必须被设置的,如果不写默认是有的。否则很容易被破解(字典攻击)。流加密算法也很容易被破解(加密算法分为块加密和流加密)。

参考程序:加密

  
  
  
  
  1. #用法encstr  str  key
  2.       
  3. function encstr()  
  4. {  
  5.     local str_need_enc=$1  
  6.     local str_key=$2  
  7.     local result="" 
  8.     if [ "X" = "X$str_need_enc" ];then 
  9.         return 1  
  10.     fi  
  11.     if [ "X" = "X$str_key" ];then 
  12.         return 2  
  13.     fi  
  14.     result=`echo $str_need_enc |openssl enc -aes-256-cfb -e -base64 -k $str_key -salt`  
  15.     echo $result  
  16.     return 0  

解密

  
  
  
  
  1. #用法decstr  str  key
  2.  
  3. function decstr()  
  4. {  
  5.     local str_need_dec=$1  
  6.     local str_key=$2  
  7.     local result="" 
  8.     if [ "X" = "X$str_need_dec" ];then 
  9.         return 1  
  10.     fi  
  11.     if [ "X" = "X$str_key" ];then 
  12.         return 2  
  13.     fi  
  14.     result=`echo $str_need_dec |openssl enc -aes-256-cfb -d -base64 -k $str_key`  
  15.     echo $result  
  16.     return 0  

 

本文出自 “窈窕魑魅” 博客,谢绝转载!

你可能感兴趣的:(盐值使用,openssl指令,shell字符串加解密,aes算法)