OpenSSL提供了完整的安全通信所需的编码工具,诸如杂凑演算法(哈希算法),加解密演算法(加密/解密算法)及SSL / TLS协议的实现等。加上其开放源码的特性,使得许多开源专案或商业套件都有其踪迹.OpenSSL除了提供程式API扩充接口外,也有命令列模式的操作。
本专案主要使用C程式语言撰写,于Windows / Linux / BSD / MacOS下皆可运行。
官方网站:https://www.openssl.org/
软体授权:OpenSSL License或SSLeay License的双重授权
本篇文章为OpenSSL系列文章第三篇。常见的加解密演算法分为对称式与非对称式,有兴趣的使用者,可以在网路上搜寻相关的文章。本章节将介绍OpenSSL在非对称式加解密演算法的运用。本篇将着重于命令列模式下的非对称式加解演算法的操作。
请使用“genrsa”为其参数,随后附上“-out”参数指定输出后的档案名称
$ openssl genrsa -out private.pem
Generating RSA private key, 512 bit long modulus
.++++++++++++
...++++++++++++
e is 65537 (0x10001)
执行后,OpenSSL预设会产生长度为512位的私钥。
我们可以使用额外指令参数来改成预设的私钥长度。例如,产生1024位长度的私钥,可以在上列指令的最后加上“1024”,如:
$ openssl genrsa -out private.pem 1024
Generating RSA private key, 1024 bit long modulus
.++++++
........................................................++++++
e is 65537 (0x10001)
以此类推,若是“4096”,则
$ openssl genrsa -out private.pem 4096
Generating RSA private key, 4096 bit long modulus
......................................................................................++
..................++
e is 65537 (0x10001)
需要注意的是,愈长的私钥被破解的机率愈低,但是相对地,我们在使用加密与解密的时间也会愈长。使用者可以自行评量。
参考指定私钥档案“ - out”参数指定产生的公钥档案名称,“ - outform”参数指定公钥的输出格式,以及“ - 参数结尾
$ openssl rsa -in private.pem -out public.pem -outform PEM -pubout
writing RSA key
执行后,OpenSSL会产生public.pem的档案在磁碟中。
请使用“rsautl”为其参数,随后附上“-encrypt”参数指定加密的运行,“ - inkey”参数指定密钥档案,“ - pubin”参数将公钥产生于加密档案中,“ - 参数指定欲加密的档案,以及“-out”参数指定加密后的档案名称
$ openssl rsautl -encrypt -inkey public.pem -pubin -in file -out file.rsa
执行后,OpenSSL会产生档案.rsa的档案在磁碟中。
注意,RSA非对称式加解演算法因为先天的限制,无法加密过大的档案,若遇到这个问题时,OpenSSL会输出如下的错误讯息:
RSA operation error
13931:error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size:rsa_pk1.c:151:
若遇到到这个问题时,最简单的方式就是使用对称式的加解密演算法,而不是非对称式的加解密演算法。
请使用“rsautl”为其参数,随后附上“-decrypt”参数指定解密的运行,“ - inkey”参数指定密钥档案,“ - in”参数指定欲解密的档案,以及“-out”参数指定解密后的档案名称:
$ openssl rsautl -decrypt -inkey private.pem -in file.rsa -out file
执行后,OpenSSL会产生档案的档案在磁碟中。
本文范例介绍了RSA非对称式加解密档案的操作。当然除了本系列文章的介绍外,OpenSSL还提供许多好用的功能,就请使用者自行探索啰。
https://www.openfoundry.org/en/tech-column/8615-opensource-security-algorithm-tool-openssl3-rsa-symmetric-encryption-and-decryption-algorithms