openssl 加密解密 指令_详解OpenSSL中的加密算法指令(备份Gerrit库代码)

本文介绍了OpenSSL中对称加密算法的使用,包括通过指令和enc调用方式。详细讲解了openssl enc命令的参数,如ciphername、in、out、pass、e/d等,并给出了加密解密的示例,涉及AES、DES等算法。此外,还讨论了固定salt值加密、base64编码解码以及手动指定Key和IV值的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、对称加密算法概述

openssl的加密算法库提供了丰富的对称加密算法,我们可以通过openssl提供的对称加密算法指令的方式使用,也可以通过调用openssl提供的API的方式使用。

openssl的对称加密算法指令主要用来对数据进行加密和解密处理,openssl基本上为所有其支持的对称加密算法都提供了指令的方式的应用,

这些应用指令的名字基本上都是以对称加密算法本身的名字加上位数、加密模式或者其他属性组合而成。

例如DES算法的CBC模式,其对应的指令就是des-cbc。

可以通过命令查看当前版本的openssl支持的对称加密算法,例如CentOS7 openssl版本及支持对称加密算法指令如下:

[root@backup~]# openssl enc --help

unknown option'--help'options are-in input file-out output file-pass pass phrase source-e encrypt-d decrypt-a/-base64 base64 encode/decode, depending on encryption flag-k passphrase isthe next argument-kfile passphrase isthe first line of the file argument-md the next argument isthe md to use to create a keyfrom a passphrase. See openssl dgst -h forlist.-S salt in hex isthe next argument-K/-iv key/iv in hex isthe next argument-[pP] print the iv/key (then exit if -P)-bufsize buffer size-nopad disable standard block padding-engine e use engine e, possibly a hardware device.

Cipher Types-aes-128-cbc -aes-128-cbc-hmac-sha1 -aes-128-cfb-aes-128-cfb1 -aes-128-cfb8 -aes-128-ctr-aes-128-ecb -aes-128-gcm -aes-128-ofb-aes-128-xts -aes-192-cbc -aes-192-cfb-aes-192-cfb1 -aes-192-cfb8 -aes-192-ctr-aes-192-ecb -aes-192-gcm -aes-192-ofb-aes-256-cbc -aes-256-cbc-hmac-sha1 -aes-256-cfb-aes-256-cfb1 -aes-256-cfb8 -aes-256-ctr-aes-256-ecb -aes-256-gcm -aes-256-ofb-aes-256-xts -aes128 -aes192-aes256 -bf -bf-cbc-bf-cfb -bf-ecb -bf-ofb-blowfish -camellia-128-cbc -camellia-128-cfb-camellia-128-cfb1 -camellia-128-cfb8 -camellia-128-ecb-camellia-128-ofb -camellia-192-cbc -camellia-192-cfb-camellia-192-cfb1 -camellia-192-cfb8 -camellia-192-ecb-camellia-192-ofb -camellia-256-cbc -camellia-256-cfb-camellia-256-cfb1 -camellia-256-cfb8 -camellia-256-ecb-camellia-256-ofb -camellia128 -camellia192-camellia256 -cast -cast-cbc-cast5-cbc -cast5-cfb -cast5-ecb-cast5-ofb -des -des-cbc-des-cfb -des-cfb1 -des-cfb8-des-ecb -des-ede -des-ede-cbc-des-ede-cfb -des-ede-ofb -des-ede3-des-ede3-cbc -des-ede3-cfb -des-ede3-cfb1-des-ede3-cfb8 -des-ede3-ofb -des-ofb-des3 -desx -desx-cbc-id-aes128-GCM -id-aes192-GCM -id-aes256-GCM-idea -idea-cbc -idea-cfb-idea-ecb -idea-ofb -rc2-rc2-40-cbc -rc2-64-cbc -rc2-cbc-rc2-cfb -rc2-ecb -rc2-ofb-rc4 -rc4-40 -rc4-hmac-md5-seed -seed-cbc -seed-cfb-seed-ecb -seed-ofb

[root@backup~]#

可以看到上述我们执行的是enc-help命令,enc是什么东西?原来openssl提供了两种方式调用对称加密算法:

一种就是直接调用对称加密指令,例如:

openssl des-cbc -in plain.txt -out encrypt.txt -pass pass:12345678另外一种是使用enc的方式,即用对称加密指令作为enc指令的参数,例如:.

openssl enc-des-cbc -in plain.txt -out encrypt.txt -pass pass:12345678上述两条指令完成的功能是一样的,而且其参数也是一样。原来enc是作用是什么呢?简单来说,为了省事……。

openssl提供了N多的对称加密算法指令,enc就是把这些N多的对称的加密算法指令统一集成到enc指令中。

当用户使用时,只需使用enc,指定加密算法,就是完成单独的加密算法指令完成的操作。

而且,enc中可以指定的对称加密算法指令可能并没有以单独指令的形式存在。所有笔者建议使用enc这种方式。

当然,虽然openssl为我们提供的对称加密算法指令虽然功能强大,

但并不完整,例如对称加密算法不支持76位的RC2加解密或者84位的RC4加解密灯功能。

如果想灵活的使用这些加密算法和模式,就需要学习openssl提供的API2、对称加密算法指令参数

可以通过enc的man手册查看enc的详细用法,也可以通过enc-help的方式查看主要参数概要说明,如下

[root@backup~]# openssl enc --help

unknown option'--help'options are-in input file-out output file-pass pass phrase source-e encrypt-d decrypt-a/-base64 base64 encode/decode, depending on encryption flag-k passphrase isthe next argument-kfile passphrase isthe first line of the file argument-md the next argument isthe md to use to create a keyfrom a passphrase. See openssl dgst -h forlist.-S salt in hex isthe next argument-K/-iv key/iv in hex isthe next argument-[pP] print the iv/key (then exit if -P)-bufsize buffer size-nopad disable standard block padding-engine e use engine e, possibly a hardware device.

说明:-chipername选项:加密算法,Openssl支持的算法在上面已经列出了,你只需选择其中一种算法即可实现文件加密功能。-in选项:输入文件,对于加密来说,输入的应该是明文文件;对于解密来说,输入的应该是加密的文件。该选项后面直接跟文件名。-out选项:输出文件,对于加密来说,输出的应该是加密后的文件名;对于解密来说,输出的应该是明文文件名。-pass选项:选择输入口令的方式,输入源可以是标准输入设备,命令行输入,文件、变量等。-e选项:实现加密功能(不使用-d选项的话默认是加密选项)。-d选项:实现解密功能。-a/-base64由于文件加密后是二进制形式,不方便查看,使用该参数可以使加密后的内容经过base64编码,使其可读;同样,解密时需要先进行base64解编码,然后进行解密操作。-k/-kfile兼容以前版本,指定密码输入方式,现已被pass参数取代-md指定密钥生成的摘要算法,用户输入的口令不能直接作为文件加密的密钥,而是经过摘要算法做转换,此参数指定摘要算法,默认md5-K/-IV默认文件的加密密钥的Key和IV值是有用户输入的密码经过转化生成的,但也可以由用户自己指定Key/IV值,此时pass参数不起作用-salt选项:是否使用盐值,默认是使用的。-[pP] 加上p参数会打印文件密钥Key和IV值,加上P参数也会打印文件密钥Key和IV值,但不进行真正的加解密操作

[bufsize]读写文件的I/O缓存,一般不需要指定

[-nopad]不使用补齐,这就需要输入的数据长度是使用加密算法的分组大小的倍数

[engine]指定三方加密设备,没有环境,暂不实验3、对称加密算法使用示例1、只对文件进行base64编码,而不使用加解密/*对文件进行base64编码*/openssl enc-base64 -in plain.txt -outbase64.txt/*对base64格式文件进行解密操作*/openssl enc-base64 -d -in base64.txt -outplain2.txt/*使用diff命令查看可知解码前后明文一样*/diff plain.txt plain2.txt2、不同方式的密码输入方式/*命令行输入,密码123456*/openssl enc-aes-128-cbc -in plain.txt -out out.txt -pass pass:123456

/*文件输入,密码123456*/echo123456 >passwd.txt

openssl enc-aes-128-cbc -in plain.txt -out out.txt -pass file:passwd.txt/*环境变量输入,密码123456*/passwd=123456export passwd

openssl enc-aes-128-cbc -in plain.txt -out out.txt -pass env:passwd/*从文件描述输入*/openssl enc-aes-128-cbc -in plain.txt -out out.txt -pass fd:1

/*从标准输入输入*/openssl enc-aes-128-cbc -in plain.txt -out out.txt -pass stdin3、固定salt值加密

xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -P

salt=32F5C360F21FC12D

key=D7E1499A578490DF940D99CAE2E29EB1

iv=78EEB538897CAF045F807A97F3CFF498

xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -P

salt=DAA482697BECAB46

key=9FF8A41E4AC011FA84032F14B5B88BAE

iv=202E38A43573F752CCD294EB8A0583E7

xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -P -S 123salt=1230000000000000key=50E1723DC328D98F133E321FC2908B78

iv=1528E9AD498FF118AB7ECB3025AD0DC6

xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -pass pass:123456 -P -S 123salt=1230000000000000key=50E1723DC328D98F133E321FC2908B78

iv=1528E9AD498FF118AB7ECB3025AD0DC6

xlzh@cmos:~$

可以看到,不使用-S参数,salt参数随机生成,key和iv值也不断变化,当slat值固定时,key和iv值也是固定的。4、加解密后过程使用base64编解码/*使用-a参数加密后使用base64编码*/xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -a -out encrypt.txt -pass pass:123456

/*使用-a参数解密前使用base64解码*/xlzh@cmos:~$ openssl enc -aes-128-cbc -in encrypt.txt -d -a -out plain1.txt -pass pass:123456

/*文件一样*/xlzh@cmos:~$ diff plain.txt plain1.txt/*加密后文件使用了base64编码*/xlzh@cmos:~$ cat encrypt.txt

U2FsdGVkX19KbCj9GMI1TBOQjP8JJcefIUH1tHwf/Z4=

5、手动指定Key和IV值/*手动指定key和iv值,salt固定*/xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -K 1223 -iv f123 -p

salt=0B00000000000000

key=12230000000000000000000000000000iv=F1230000000000000000000000000000/*指定pass密码,不起作用,注意Key和IV值是16进制*/xlzh@cmos:~$ openssl enc -aes-128-cbc -in plain.txt -out encrypt.txt -K 1223 -iv f123 -p -pass pass:123456salt=F502F4B8DE62E0E5

key=12230000000000000000000000000000iv=F12300000000000000000000000000006、实例

##所以命令都在Linux中执行##

##查看是否安装了该工具,我的环境自带了,文章不做安装描述##

openssl

##加密(执行后获得加密码)##

echo abc| openssl aes-128-cbc -k 123 -base64

##解密(加密码太长,用*表示了)##

echo***** | openssl aes-128-cbc -d -k 123 -base647、[root@backup ~]# cat /data/public/kdzd/oldcode/gitcode_tar.sh

#!/bin/bash

log_file="/data/public/kdzd/log.txt"echo"###################BEGIN###############" >>$log_file

date>>$log_file

exec1>>$log_file

exec2>>$log_file

tar-czf - /data/public/kdzd/code_190 | openssl des3 -salt -k /root/mima/pwd -out /data/public/kdzd/code_tar_gz/code_190.tar.gz

tar-czf - /data/public/kdzd/code_200 | openssl des3 -salt -k /root/mima/pwd -out /data/public/kdzd/code_tar_gz/code_200.tar.gz

[root@backup~]#

压缩

tar-czvf /path/to/file.tar.gz file

解压

tar-xzvf /path/to/file.tar.gz /path/to

加密压缩

tar-czvf - file | openssl des3 -salt -k password -out /path/to/file.tar.gz

解密解压

openssl des3-d -k password -salt -in /path/to/file.tar.gz | tar xzf -

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值