Linux命令行下的openssl加密

时间:2024-02-22 07:04:18

这里使用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进制过长默认是会换行的,如果不希望结果被分成两行显示就把换行宽度设大一点

 

 下面附上执行结果: