這里使用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進制過長默認是會換行的,如果不希望結果被分成兩行顯示就把換行寬度設大一點
下面附上執行結果: