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  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章