openssl加密与解密
openssl默认是从流中读取信息的,所以一般都是使用-in指定文件,当然,既然是流,那么如果不想用文件,可以用管道来处理加密解密信息。
比如:
cat xx.md | openssl enc -base64
cat xx.md | openssl enc -base64
解密:
cat xx.md | openssl enc -base64 -d
cat xx.md | openssl enc -base64 -d
使用aes-256-cbc算法加密:
cat config.ini | openssl enc -aes-256-cbc -base64 > config.ini.enc
cat config.ini | openssl enc -aes-256-cbc -base64 > config.ini.enc
解密:
cat config.ini.enc | openssl enc -aes-256-cbc -base64 -d
cat config.ini.enc | openssl enc -aes-256-cbc -base64 -d
上面的-base64是可选的,可以不加!另外,如果不加-d,那么就是加密,加了-d就是解密。上面的加密和解密都是让用户手动输入密码,如果想让脚本自动输入密码,可以使用-pass参数,比如:
cat config.ini | openssl enc -aes-256-cbc -base64 -pass pass:123456 > config.ini.enc
cat config.ini | openssl enc -aes-256-cbc -base64 -pass pass:123456 > config.ini.enc
解密:
cat config.ini.enc | openssl enc -aes-256-cbc -base64 -d -pass pass:123456
cat config.ini.enc | openssl enc -aes-256-cbc -base64 -d -pass pass:123456
上面的123456就是密码,当然,你也可以使用文件来指定密码,比如:
cat config.ini | openssl enc -aes-256-cbc -base64 -pass file:./key.bin > config.ini.enc
cat config.ini | openssl enc -aes-256-cbc -base64 -pass file:./key.bin > config.ini.enc
解密:
cat config.ini.enc | openssl enc -aes-256-cbc -base64 -d -pass file:./key.bin
cat config.ini.enc | openssl enc -aes-256-cbc -base64 -d -pass file:./key.bin
上面的key.bin就是存放密码的文件,当然,你也可以使用环境变量来指定密码,比如:
export PASS=123456
cat config.ini | openssl enc -aes-256-cbc -base64 -pass env:PASS > config.ini.enc
export PASS=123456
cat config.ini | openssl enc -aes-256-cbc -base64 -pass env:PASS > config.ini.enc
解密:
export PASS=123456
cat config.ini.enc | openssl enc -aes-256-cbc -base64 -d -pass env:PASS
export PASS=123456
cat config.ini.enc | openssl enc -aes-256-cbc -base64 -d -pass env:PASS
上面的PASS就是环境变量,当然,你也可以使用标准输入来指定密码,比如:
cat config.ini | openssl enc -aes-256-cbc -base64 -pass stdin > config.ini.enc
cat config.ini | openssl enc -aes-256-cbc -base64 -pass stdin > config.ini.enc
解密:
cat config.ini.enc | openssl enc -aes-256-cbc -base64 -d -pass stdin
cat config.ini.enc | openssl enc -aes-256-cbc -base64 -d -pass stdin
上面的stdin就是标准输入,当然,你也可以使用命令来指定密码,比如:
cat config.ini | openssl enc -aes-256-cbc -base64 -pass pass:$(echo 123456) > config.ini.enc
cat config.ini | openssl enc -aes-256-cbc -base64 -pass pass:$(echo 123456) > config.ini.enc
解密:
cat config.ini.enc | openssl enc -aes-256-cbc -base64 -d -pass pass:$(echo 123456)
cat config.ini.enc | openssl enc -aes-256-cbc -base64 -d -pass pass:$(echo 123456)
上面的$(echo 123456)就是命令,当然,你也可以使用环境变量来指定密码,比如:
export PASS=123456
cat config.ini | openssl enc -aes-256-cbc -base64 -pass pass:$(echo $PASS) > config.ini.enc
export PASS=123456
cat config.ini | openssl enc -aes-256-cbc -base64 -pass pass:$(echo $PASS) > config.ini.enc
解密:
export PASS=123456
cat config.ini.enc | openssl enc -aes-256-cbc -base64 -d -pass pass:$(echo $PASS)
export PASS=123456
cat config.ini.enc | openssl enc -aes-256-cbc -base64 -d -pass pass:$(echo $PASS)
上面的$(echo $PASS)就是环境变量,当然,你也可以使用文件来指定密码,比如:
cat config.ini | openssl enc -aes-256-cbc -base64 -pass pass:$(cat key.bin) > config.ini.enc
cat config.ini | openssl enc -aes-256-cbc -base64 -pass pass:$(cat key.bin) > config.ini.enc
解密:
cat config.ini.enc | openssl enc -aes-256-cbc -base64 -d -pass pass:$(cat key.bin)
cat config.ini.enc | openssl enc -aes-256-cbc -base64 -d -pass pass:$(cat key.bin)
openssl对某个字符串进行base64编码和解码。
编码:
echo "Hello World" | openssl enc -base64
echo "Hello World" | openssl enc -base64
解码:
echo "SGVsbG8gV29ybGQK" | openssl enc -base64 -d
echo "SGVsbG8gV29ybGQK" | openssl enc -base64 -d
OpenSSL工具进行文件加密。
以下是一个简单的步骤:
安装OpenSSL:在大多数Linux发行版中,OpenSSL都是预安装的。如果没有,你可以使用包管理器进行安装。例如,在Ubuntu或Debian上,你可以使用以下命令安装:
sudo apt-get install openssl
sudo apt-get install openssl
生成密码:你可以使用OpenSSL生成一个随机密码。例如,以下命令将生成一个32字节的随机密码:
openssl rand -base64 32 > key.bin
openssl rand -base64 32 > key.bin
这将在你的当前目录下创建一个名为key.bin的文件,其中包含你的随机密码。
echo "xxx" | openssl -base64
echo "xxx" | openssl -base64
这将生成一个固定的密码
加密文件:现在你可以使用此密码对文件进行加密。例如,如果你想加密一个名为file.txt的文件,你可以使用以下命令:
openssl enc -aes-256-cbc -salt -in file.txt -out file.txt.enc -pass file:./key.bin
openssl enc -aes-256-cbc -salt -in file.txt -out file.txt.enc -pass file:./key.bin
这将创建一个新的加密文件file.txt.enc。
解密文件:如果你想解密这个文件,你可以使用以下命令:
openssl enc -d -aes-256-cbc -in file.txt.enc -out file.txt.dec -pass file:./key.bin
openssl enc -d -aes-256-cbc -in file.txt.enc -out file.txt.dec -pass file:./key.bin
这将创建一个解密的文件file.txt.dec。
注意:这只是一个基本的示例,并且在实际使用中,你需要考虑如何安全地存储和管理密码。
盐值-salt的作用
在OpenSSL中,-salt
选项用于在加密过程中增加额外的随机性。盐(Salt)是一个随机值,它在密码哈希过程中与密码一起使用,以防止对哈希的预计算攻击,例如彩虹表攻击。
在上述命令中,-salt
选项告诉OpenSSL在加密文件时使用盐值。这意味着即使两个文件使用相同的密码进行加密,由于盐值的随机性,它们的加密输出也会不同。
当你使用-salt
选项进行加密时,OpenSSL会自动生成一个新的随机盐值。这个盐值会存储在加密文件的头部,所以当你解密文件时,OpenSSL能够找到并使用它。
总的来说,使用-salt
选项可以增加加密的安全性。
简单的加密,输入密码
以下是使用对称加密算法对文件进行加密的流程:
选择一种对称加密算法,如AES、DES等。
生成一个密钥,可以使用随机数生成器生成一个随机的密钥,也可以使用密码学安全的伪随机数生成器生成一个密钥。
将密钥保存在一个安全的地方,如密码管理器中。
使用生成的密钥对要加密的文件进行加密,可以使用shell命令行工具中的openssl命令来实现。
在命令行中输入以下命令:
openssl enc -aes-256-cbc -in inputfile -out outputfile
其中,-aes-256-cbc表示使用AES算法和CBC模式进行加密,-in inputfile表示要加密的文件,-out outputfile表示加密后的文件。
系统会提示输入密码,输入生成的密钥即可完成加密。
加密后的文件可以通过网络传输或存储在本地磁盘中,只有拥有密钥的人才能解密该文件。
解密文件时,可以使用以下命令:
openssl enc -d -aes-256-cbc -in inputfile -out outputfile
其中,-d表示解密,-aes-256-cbc表示使用AES算法和CBC模式进行解密,-in inputfile表示要解密的文件,-out outputfile表示解密后的文件。
系统会提示输入密码,输入生成的密钥即可完成解密。
注意事项:
密钥的安全性非常重要,一定要保存在安全的地方,不要轻易泄露。
加密后的文件可以通过网络传输或存储在本地磁盘中,但要注意保护文件的安全性,防止被未经授权的人访问。
加密算法和模式的选择要根据实际需求和安全性要求进行选择,不能盲目选择。
在使用openssl命令进行加密和解密时,要注意命令的参数和选项,确保操作正确。
非对称加密
- 生成公钥和私钥
首先需要先生成公钥和私钥(注意要用OpenSSL生成的)
openssl genrsa -out private_key.pem 2048
openssl rsa -in private_key.pem -pubout -out public_key.pem
openssl genrsa -out private_key.pem 2048
openssl rsa -in private_key.pem -pubout -out public_key.pem
- 加密和解密
使用以下命令进行加密和解密:
加密:
openssl rsautl -encrypt -inkey public_key.pem -pubin -in plaintext.txt -out ciphertext.txt
openssl rsautl -encrypt -inkey public_key.pem -pubin -in plaintext.txt -out ciphertext.txt
解密:
openssl rsautl -decrypt -inkey private_key.pem -in ciphertext.txt -out plaintext.txt
openssl rsautl -decrypt -inkey private_key.pem -in ciphertext.txt -out plaintext.txt
请勿使用ssh-gen生成的证书,然后又使用openSSL加密
如果您使用的是ssh-gen生成的证书进行OpenSSL加密,可能会出现“unable to load Public Key”的错误。这是因为ssh-gen生成的证书格式与OpenSSL不兼容。
要在OpenSSL中使用ssh-gen生成的证书,需要将其转换为OpenSSL格式。可以使用以下命令将ssh-gen生成的证书转换为OpenSSL格式:
ssh-keygen -e -m pem -f ssh_key.pub > openssl_key.pub
ssh-keygen -e -m pem -f ssh_key.pub > openssl_key.pub
其中,ssh_key.pub是ssh-gen生成的公钥证书文件,openssl_key.pub是转换后的OpenSSL格式公钥证书文件。
转换后,您可以使用openssl rsautl命令进行加密和解密。例如,使用以下命令进行加密:
openssl rsautl -encrypt -inkey openssl_key.pub -pubin -in plaintext.txt -out ciphertext.txt
openssl rsautl -encrypt -inkey openssl_key.pub -pubin -in plaintext.txt -out ciphertext.txt
请注意,转换后的OpenSSL格式公钥证书只能用于加密,不能用于签名。如果需要进行签名操作,需要使用OpenSSL生成的证书。
注意
*** WARNING : deprecated key derivation used. Using -iter or -pbkdf2 would be better.
openssl加密或者解密的时候出现这个警告,是因为openssl默认使用的是MD5算法,而MD5算法已经被证明是不安全的,所以会出现这个警告。解决办法是使用iter或者pbkdf2算法,这两个算法都是基于sha256的,所以不会出现这个警告。这不是很重要,继续用我们的MD5也没什么问题。