Skip to content

商务合作:vTikTok


公众号:



openssl加密与解密


openssl默认是从流中读取信息的,所以一般都是使用-in指定文件,当然,既然是流,那么如果不想用文件,可以用管道来处理加密解密信息。

比如:

sh
cat xx.md | openssl enc -base64
cat xx.md | openssl enc -base64

解密:

sh
cat xx.md | openssl enc -base64 -d
cat xx.md | openssl enc -base64 -d

使用aes-256-cbc算法加密:

sh
cat config.ini | openssl enc -aes-256-cbc -base64 > config.ini.enc
cat config.ini | openssl enc -aes-256-cbc -base64 > config.ini.enc

解密:

sh
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参数,比如:

sh
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

解密:

sh
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就是密码,当然,你也可以使用文件来指定密码,比如:

sh
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

解密:

sh
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就是存放密码的文件,当然,你也可以使用环境变量来指定密码,比如:

sh
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

解密:

sh
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就是环境变量,当然,你也可以使用标准输入来指定密码,比如:

sh
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

解密:

sh
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就是标准输入,当然,你也可以使用命令来指定密码,比如:

sh
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

解密:

sh
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)就是命令,当然,你也可以使用环境变量来指定密码,比如:

sh
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

解密:

sh
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)就是环境变量,当然,你也可以使用文件来指定密码,比如:

sh
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

解密:

sh
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工具进行文件加密。

以下是一个简单的步骤:

  1. 安装OpenSSL:在大多数Linux发行版中,OpenSSL都是预安装的。如果没有,你可以使用包管理器进行安装。例如,在Ubuntu或Debian上,你可以使用以下命令安装:

    sudo apt-get install openssl
    sudo apt-get install openssl
  2. 生成密码:你可以使用OpenSSL生成一个随机密码。例如,以下命令将生成一个32字节的随机密码:

    openssl rand -base64 32 > key.bin
    openssl rand -base64 32 > key.bin

    这将在你的当前目录下创建一个名为key.bin的文件,其中包含你的随机密码。

    echo "xxx" | openssl -base64
    echo "xxx" | openssl -base64

    这将生成一个固定的密码

  3. 加密文件:现在你可以使用此密码对文件进行加密。例如,如果你想加密一个名为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。

  4. 解密文件:如果你想解密这个文件,你可以使用以下命令:

    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选项可以增加加密的安全性。

简单的加密,输入密码

以下是使用对称加密算法对文件进行加密的流程:

  1. 选择一种对称加密算法,如AES、DES等。

  2. 生成一个密钥,可以使用随机数生成器生成一个随机的密钥,也可以使用密码学安全的伪随机数生成器生成一个密钥。

  3. 将密钥保存在一个安全的地方,如密码管理器中。

  4. 使用生成的密钥对要加密的文件进行加密,可以使用shell命令行工具中的openssl命令来实现。

  5. 在命令行中输入以下命令:

    openssl enc -aes-256-cbc -in inputfile -out outputfile

    其中,-aes-256-cbc表示使用AES算法和CBC模式进行加密,-in inputfile表示要加密的文件,-out outputfile表示加密后的文件。

  6. 系统会提示输入密码,输入生成的密钥即可完成加密。

  7. 加密后的文件可以通过网络传输或存储在本地磁盘中,只有拥有密钥的人才能解密该文件。

  8. 解密文件时,可以使用以下命令:

    openssl enc -d -aes-256-cbc -in inputfile -out outputfile

    其中,-d表示解密,-aes-256-cbc表示使用AES算法和CBC模式进行解密,-in inputfile表示要解密的文件,-out outputfile表示解密后的文件。

  9. 系统会提示输入密码,输入生成的密钥即可完成解密。

注意事项:

  1. 密钥的安全性非常重要,一定要保存在安全的地方,不要轻易泄露。

  2. 加密后的文件可以通过网络传输或存储在本地磁盘中,但要注意保护文件的安全性,防止被未经授权的人访问。

  3. 加密算法和模式的选择要根据实际需求和安全性要求进行选择,不能盲目选择。

  4. 在使用openssl命令进行加密和解密时,要注意命令的参数和选项,确保操作正确。

非对称加密

  1. 生成公钥和私钥

首先需要先生成公钥和私钥(注意要用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
  1. 加密和解密

使用以下命令进行加密和解密:

加密:

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也没什么问题。