Linux命令行下的openssl加密


這里使用des加密。

echo -n "${data}" | openssl des-cbc  -iv 31313131312D2D2D -K 31313131312D2D2D -nosalt  | xxd -ps -u -c100

 

上面的命令行加密方式個人拆分幾個關注點:

1.輸入輸出方式:

  輸入:使用echo加管道流,可以直接將echo內容作為輸入進行加密操作。或者使用-in參數,指定輸入文件,在輸入為二進制時使用比較合適,但是要操作文件

  輸出:如果加上-out <file> 參數,這結果輸出到文件中,如果不加,則標准輸出流輸出。這里如果只要二進制結果可以考慮輸出到文件,如果需要base64編碼結果可以加-a參數,如果要二進制的十六進制結果可以通過管道流使用xxd處理。我這里需要得到16進制形式並賦值給變量,因此使用xxd轉化后直接在shell中賦值給變量,避免文件操作。

 

2.相關參數

做des加密時,要關注的有一下幾個參數:

-P/-p :打印key、iv和salt,可以用於驗證加密參數。-P是只打印加密參數信息,包括key、iv、salt,而-p打印加密參數后還會打印最終加密結果

-K :指定加密密鑰key,需要十六進制形式字符串

-iv:IV值,也是十六進制形式

-pass pass:"${password}" :密碼,密碼可以用於生成key和iv,因此指定了pass后可以不用指定-K和-iv。另外,同時指定密碼和key或iv時,指定的key或iv會覆蓋密碼生成的key或iv

-k ${password}:同 -pass ,密碼的簡易輸入參數。

-S:指定鹽值

-nosalt :不使用鹽值

 

3.二進制結果轉換

  (1)base64編碼, 使用-a參數,  直接在openssl命令中使用-a參數,openssl命令可以直接以base64編碼形式輸出結果

  (2)16進制顯示,使用轉化命令。Linux原生命令包括hexdump、od、xxd。其中hexdump和od的結果和xxd相比貌似是反的,大小端的問題,我這里使用xxd。

    關於xxd的使用,就最上面的示例的幾個參數做下解釋:

      -ps ,只打印16進制的信息,默認會打印位偏移、十六進制和ascii結果,如果只要16進制的轉化結果就使用這個參數

      -u ,16進制大寫顯示

      -c,換行寬度,如果生成的16進制過長默認是會換行的,如果不希望結果被分成兩行顯示就把換行寬度設大一點

 

 下面附上執行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM