JS中实现私钥导出公钥
有需求前端实现基于私钥导出公钥,调研了几个方案,最终解决,这里总结下。
解决办法
使用node-forge,该库支持浏览器端/Node服务端,因此前端可用。
如下贴出Node下如何使用
1 | const forge = require('node-forge');// 浏览器端,更换为import或者直接script导入JS模块即可 |
其它几个加密方式
- 前端原生提供crypto,但当前功能较弱,无法解决
- 社区常用加密库
jsrsasign
当前不支持基于私钥导出公钥 - Node Crypto模块下支持
crypto.createPublicKey(key)
,但只能在服务端使用 - 命令行工具
openssl
支持openssl pkey -in ./client1.key -pubout
,但只能在服务端使用
综上,如果必须前端实现,那就需要使用node-forge,如果可以借助服务端实现,那么如上几种方案都可行。
写在最后
个人认为前端加密这块过去比较弱的原因有两点,1是场景弱,Web所在意的更多是交互,而非安全性;2是加密解密性能开销较大。但随着现在Web的发展,各种应用场景层出不穷,且硬件也在提高,性能开销已不是问题。所以前端加密需求也就出现的越来越多了,因此前端加密也就排上日程了,比如crypto模块的出现。