Mac下如何生成RSA加密的私钥和公钥+JS中使用RSA加密
第一部分:RSA公钥和私钥的生成
关于RSA加密算法的介绍这里就不复制粘贴了,下面讲的是如何在Mac下利用命令行生成RSA的私钥和公钥。
使用command生成2048位的私有密钥
openssl genrsa -out private_key.pem 2048
当前的目录下会生成一个名为 private_key.pem 的文件,如果用文本编辑器打开,你会发现是这样的:
这些东西就是我们刚刚生成的密钥,这个东西只能放在服务端,如果这个东西泄漏,整个RSA加密环节就暴露了。
接下来我们利用私钥生成公钥(command命令必须在刚才的目录下执行,否则会找不到private_key.pem)
注意:这里生成的公钥只适合在JS中的library使用
openssl rsa -inform PEM -modulus -noout < private_key.pem
如果执行命令的时候报错:
这说明密钥文件并不是SSL命令生成的,只要执行以下的命令就可以了:
openssl rsa -pubin -inform PEM -modulus -noout < public_key.pem
执行这条命令我们就可以打印出公钥了:
使用公钥的时候记得把前面的"Modulus="去掉,得到的公钥就可以直接在JS中使用了(第二部分会讲到JS中使用RSA加密的方法)。
在其他的语言中使用的公钥并不是这个样子的,接下来我们要通过公钥来生成私钥。
openssl rsa -in private_key.pem -pubout -out public_key.pem
需要注意的是这里生成的私钥和公钥都是pem格式的,有些语言可能需要pkcs8格式,需要继续在命令行中对私钥进行格式转换:
openssl pkcs8 -topk8 -inform PEM -in private_key.pem -outform PEM -nocrypt -out private_key_pkcs8.pem
公钥的格式转换同上,就不赘述了。
第二部分:JS中使用RSA加密参数
在JS中使用RSA加密需要引入3个js文件:
在JS中直接调用方法就可以了:
function RSA_Encryption(encryptingString) {
var publicKey = 'CA8C4C8364B6C8ABE8FDB20438805744AFEC9435F0A047F4E521936EB9C307A36FCFA5EAFBCF1C42A88D51A74F77EBC9E84B7BA5B43041818A26884813F914ED907BF5C31F174ED1A46AE5D6927AD03829B4AC8335E9C3F9C35FE67D100C4980791D137FCE05110CF505FD4238787EB8BE8C1C4EC5AD71363BD1195D283DE3E5';
setMaxDigits(128);
var key = new RSAKeyPair('10001','10001',publicKey);
var encrypted_string = encryptedString(key,encryptingString,RSAAPP.PKCS1Padding);
return encrypted_string;
}
setMaxDigits方法中是设置数据区大小的,如果你用的是1024-bit的密钥,那么这里的数值要>=1024 * 2 /16 = 128
-------------------------------------------------7.13日更新-------------------------------------------------
JS里面的用法有问题,需要加一行代码处理才可以:
function RSA_Encryption(encryptingString) { var publicKey = 'CA8572C41BF6B92A895B132A8853DC0EC416ABFC298466C882F4E1D3298BE776132E711A2C6F560A6A1F5EFC339FC438A83768E6B6EFC1D9936570198481F40B53B826935F19D6FDF7950E5747697F3051FC2F8C1DD7EB66885301444A10B059F4468D8362989960E76FBB0A0B7DDC1176FBE0A279DF7032A643FC0AEC48D8CD'; setMaxDigits(262); var key = new RSAKeyPair('10001','10001',publicKey,1024); var encrypted_string = encryptedString(key,encryptingString,RSAAPP.PKCS1Padding,RSAAPP.RawEncoding); encrypted_string = window.btoa(encrypted_string); return encrypted_string; }
参考链接:http://www.ohdave.com/rsa