linux中常用的加密总结--Openssl加解密与签名验证--genrsa/rsa/rsautl

linux中常用的加密总结–openssl加解密

1.对称加密 enc(加解密参数一致)

官方语法:
openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id]
-e 指定加密算法
-d 解密
-a 使用base64编码
-base64 使用base64解码
-in 要加密文件存放位置
-out 加密后的文件存放位置
-k 输入密码
-iv 输入一个向量

中文简易常用版:openssl enc -加密算法名 [-e加密]/-d解密 [-in要加解密的文件] [-out结果输出到的文件]

openssl加解密都可以使用上面管道符的形式:

>echo 运维小菜 | openssl enc -aes128 -a
enter aes-128-cbc encryption password: 
Verifying - enter aes-128-cbc encryption password:
U2FsdGVkX1+Gz1RBh1WFtnchVbejkPRD/71gkjkX2n4= 

下面都用文件的方式举例:点击–>各种加密的区别

# 1.不使用base64编码方式,不使用盐
#加密
> openssl enc -aes128 -in file.txt -nosalt 
enter aes-128-cbc encryption password:
Verifying - enter aes-128-cbc encryption password:
DŽ.k>#qn躄ﳣ«k 
#解密(交互式)
> openssl enc -aes128 -in encrypt.txt -nosalt  -d
enter aes-128-cbc decryption password:
运维小菜
#直接输入密码
> openssl enc -aes128 -in encrypt.txt -a -d -k 123
运维小菜


# 2.使用base64编码方式,不使用盐(不用盐每次结果一样)
> openssl enc -aes128 -in file.txt -nosalt -a 
enter aes-128-cbc encryption password:
Verifying - enter aes-128-cbc encryption password:
yEQuEGs+I3Fu6jtE77Ojqw== 
#解密
> openssl enc -aes128 -d -in encrypt.txt -nosalt -a -k 123
运维小菜


# 3.不使用base64编码方式,使用盐
#加密
> openssl enc -aes128 -in file.txt 
enter aes-128-cbc encryption password:
Verifying - enter aes-128-cbc encryption password:
Salted_®p¯򥵸DþcIr²̚؝խ  # Salted_标识
#解密
> openssl enc -aes128 -in encrypt.txt -d -k 123
运维小菜


# 4.使用base64编码方式,使用盐(随机盐,每次不一样)
#加密
> openssl enc -aes128 -in file.txt -a 
enter aes-128-cbc encryption password:
Verifying - enter aes-128-cbc encryption password:
U2FsdGVkX19ctTOMERzbdFkxurEpZR4c/DaWv4eZLKA=
#解密
> openssl enc -aes128 -in encrypt.txt -a -d -k 123
运维小菜

2.单项加密 dgst (加密后的密文无法解密,常用于验证)

官方语法:openssl dgst [-sha|-sha1|-mdc2|-ripemd160|-sha224|-sha256|-sha384|-sha512|-md2|-md4|-md5|-dss1] [-c] [-d] [-hex] [-binary] [-r] [-non-fips-allow] [-out filename] [-sign filename] [-keyform arg] [-passin arg] [-verify filename] [-prverify filename] [-signature filename] [-hmac key] [-non-fips-allow] [-fips-fingerprint] [file…]

# 加密:
> openssl dgst -md5 test.txt 
MD5(test.txt)= 0a100231c79644a92540e60a68e97d43

3.生成密码 passwd

官方语法:openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password} #password在最后

选项说明:
-crypt:UNIX标准加密算法,此为默认算法。如果加盐(-salt)算密码,只取盐的前2位,2位后面的所有字符都忽略。
-1(数字):基于MD5的算法代号。更多的算法代号请 点击
-apr1(数字):apache中使用的备选md5算法代号,不能和"-1"选项一起使用,因为apr1本身就默认了md5。htpasswd工具生成的身份验证密码就是此方法。
-salt:加密时加点盐,可以增加算法的复杂度。但加了盐会有副作用:盐相同,密码相同,加密的结果将一样。

> openssl passwd  -salt 1123456 sdhfui
11uT3ekQRLy0A

4.生成随机数 rand

官方语法:openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num
(num为要生成的随机数长度)

> openssl rand  -hex 2
ddc8

5.生成密钥对文件加解密 ·······更多参考请–>点击
首先需要先使用 genrsa 标准命令生成私钥,然后再使用 rsa 标准命令从私钥中提取公钥

(1)生成私钥 openssl genrsa
官方语法:openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [-engine id] [numbits]

numbits:指定要生成的私钥的长度,默认为2048。该项必须为命令行的最后一项参数。
-des/-des3/-idea:不同的加密算法
-passout args:加密私钥文件时,传递密码的格式,如果要加密私钥文件时单未指定该项,则提示输入密码。传递密码的args的格式,可从密码、环境变量、文件、终端等输入。
a.pass:password,password表示传递的明文密码 # 免于交互输入
b.env:var,从环境变量var获取密码值
c.file:filename,filename文件中的第一行为要传递的密码。若filename同时传递给"-passin"和"-passout"选项,则filename的第一行为"-passin"的值,第二行为"-passout"的值
d.stdin:从标准输入中获取要传递的密码

# 最简单用法:
> openssl genrsa 
Generating RSA private key, 2048 bit long modulus
............+++
.....................+++
e is 65537 (0x10001)
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBA……省略……pW8fsTsajHg3rCy
-----END RSA PRIVATE KEY-----

# 较复杂用法:
> openssl genrsa -des -passout pass:"123456" -out private.pem 1024 
Generating RSA private key, 1024 bit long modulus
......................++++++
................................++++++
e is 65537 (0x10001)
> cat private.pem
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-CBC,60FE1F9CE14977FB

qeUVchSTVBr省略约1000字符Brv3lOylR18YBtg==
-----END RSA PRIVATE KEY-----

(2)提取公钥 openssl rsa
官方语法:openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [-passout arg]
[-sgckey] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-engine id] 点击

> openssl rsa -in private.pem  -pubout
Enter pass phrase for private.pem: # 如果生成私钥时用了某些算法需要输入密码
writing RSA key
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDgnvJ0Xw7etrzacM4fIZIY6o/l
bcOPjMXoK5QquHEEg2byD5gWKRIk9ia/Mbr8Un/8zZQ+T9RT9051YsIa47MC2QWj
lGJIBsd6AcmJHUUH994xq1nEKnFBJ3rAtq4bJAzKqb19Y5MGTEFTzDDobie3MSQP
ZVUuJcUcgSBHjTlUmQIDAQAB
-----END PUBLIC KEY-----

rsa的其它用法 --> 点击

(3)真正的加解密 openssl rsautl

### 公钥加密,私钥解密 ###

# -encrypt 加密 -decrypt 解密  -in 要加解密的文件 -inkey 使用的密钥文件 -out 加密后的文件

# 使用私钥加密(不带-pubin参数,实际上使用私钥中的公钥)
> openssl rsautl -encrypt -in test.txt -inkey private.pem -out encrypted.txt 
#使用私钥解密
> openssl rsautl -decrypt -in encrypted.txt -inkey private.pem -out res.txt

#使用公钥加密 带-pubin参数
>openssl rsautl -encrypt -in test.txt -inkey public.pem -pubin -out encrypted_1.txt
#使用私钥解密
>openssl rsautl -decrypt -in encrypted_1.txt -inkey private.pem -out res_1.txt

6.签名与验证 sign&verify
(实际上是加解密,不是严格意义上的签名验证,签名验证参考–>这里

# 生成私钥文件
> openssl genrsa -out pri.pem
# 提取公钥
> openssl rsa -in pri.pem -out pub.pem -pubout
writing RSA key
#使用私钥对文件进行签名
> openssl rsautl -sign -in test.txt -inkey pri.pem -out test_signed.txt
# 使用公钥验证(实际上是解密,需要-pubin参数)
> openssl rsautl -verify -in test_signed.txt -inkey pub.pem -pubin -out test_verified.txt
> diff test.txt test_verified.txt #前后文件相同

# 也可用其他形式的私钥进行签名,用跟上面相同的公钥进行验证
> openssl pkcs8 -topk8 -in pri.pem -passin pass:123456 -out pri_pcks8.pem -nocrypt
> openssl rsautl -sign -in test.txt -inkey pri_pcks8.pem -out test_signed_pcks8.txt
> openssl rsautl -verify -in test_signed_pcks8.txt -inkey pub.pem -pubin -out test_verified_1.txt
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维小菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值