OpenSSL
私钥及证书
-
生成普通私钥
openssl genrsa -out privatekey.key (1024)
-
生成带加密口令的密钥
openssl genrsa -des3 -out privatekey.key (1024)
-
加密算法
- des encrypt the generated key with DES in cbc mode
- des3 encrypt the generated key with DES in ede cbc mode (168 bit key)
- aes128, -aes192, -aes256 encrypt PEM output with cbc aes
-
去除密钥的口令
openssl rsa -in privatekey.key
-
通过私钥生成证书
openssl req -new -x509 -key privatekey.key -out cacert.crt (-days 1095)
-
通过私钥生成公钥
openssl rsq -in privatekey.key -pubout -out pubkey.key
-
得到DH
openssl dhparam -out dh1024.pem (1024)
-
显示模式
openssl x509 -in privekey.crt -noout -text -modulus openssl rsa -in privatekey-passwd.key -noout -text -modulus
-
申请证书
openssl ca -in privatekey-passwd.crt -out privatekey-passwd.csr -cert privatekey-passwd.crt -keyfile privatekey-passwd.key
文件加密
-
二进制文件保护(文件内容加密)
-
要使用64位编码打包二进制文件成文本文件,输入:
openssl base64 < filename.bin > filename.txt
-
要打开64位编码的文本文件,输入:
openssl base64 -d < filename.txt > filename.bin
- 注意OpenSSL不会关心文件扩展名。
-
OpenSSL与GnuPG或MIME不一样,它还能对短字符串进行编码,如下:
echo "The Linux Journal" | openssl base64 VGhlIExpbnV4IepvdXJuYWwK
-
解码:
echo "VGhlIExpbnV4IEpvdXJuYWwK" | openssl base64 -d The Linux Journal
-
要使用64位编码打包二进制文件成文本文件,输入:
注意-d选项,它意味着解码。
-
对文件进行校验和
openssl sha1 filename openssl md5 filename
-
文件内容加密
openssl enc -aes-128-cbc < filename > filename.aes-128-cbc enter aes-128-cbc encryption password: Verifying - enter aes-128-cbc encryption password:
与GnuPG一样,OpenSSL要求提供2次密语,并且不会回显到屏幕上。
- 文件解密
解密也比GnuPG更复杂一点:
openssl enc -d -aes-128-cbc -in filename.aes-128-cbc > filename enter aes-128-cbc decryption password:
注意例子中的-d参数,它意味着解密。
-
openssl批量加密文件
#!/bin/bash password="password" file=`find -type f /tmp/test | awk 'NR>1{print $0}'` auto_des_openssl () { expect -c "set timeout -1; spawn -noecho openssl enc -des -e -a -in $2 -out $2.des; expect *password:*; send -- $1\n; set timeout 100; send -- $1\n; interact;" } for i in $file do auto_des_openssl $password $i rm -rf $i #如果不想删除源文件,可以注释掉这一行 done
- 解密文件
openssl enc -des -d -a -in file.des -out file
产生随机密语
openssl rand 15 -base64 wGcwstkb8Er0g6w1+Dm+
如果你运行了这个例子,你的输出将与这里的输出不同,因为密语是随机产生的。