首页 > 解决方案 > 了解 JSEncrypt

问题描述

我一直在探索各种用于 RSA 加密和解密的 JavaScript 库,并且在https://cdnjs.cloudflare.com/ajax/libs/jsencrypt/2.3.1/jsencrypt.min.js遇到了一个 JSEncrypt 。

但是,我很难理解这个库用于 RSA 加密和解密的逻辑和操作。主要是,

  1. 加密算法使用了哪些算法?
  2. 使用了哪些填充方案?
  3. 有盐吗?如果是这样,盐是如何产生的?
  4. 任何其他应注意的信息。

我找不到该库的任何体面的文档,也无法理解源代码的丝毫。任何帮助是极大的赞赏。

标签: encryptionrsapaddingsaltjsencrypt

解决方案


不要尝试阅读缩小的代码,而是查看从 npm 链接的主页(也发现是我的热门谷歌点击之一),它们都链接到github中的代码,该代码的格式和注释都很好。当前代码实际上支持 RSA 签名以及加密,以及密钥生成和 OpenSSL 兼容 PEM 文件的读写,尽管根据评论我认为签名可能不在您的 2.3.1 版本中,这似乎没有在此存储库中或至少未标记。RSA 核心位于 https://github.com/travist/jsencrypt/blob/master/lib/jsbn/rsa.ts清楚地表明它使用 'pkcs1' 'type 1' 填充作为签名,使用 'type 2' 进行加密;这些是来自 PKCS1 v1.5 的方案,现在在当前PKCS1 v2中重新命名为 RSASSA-PKCS1-v1_5(RSASSA = RSA Signature Scheme with Annex)和 RSAES-PKCS1-v1_5(RSAES = RSA Encryption Scheme)。Old-PKCS1 type 1 是确定性的;类型 2 使用https://github.com/travist/jsencrypt/blob/master/lib/jsbn/rng.ts随机分配,您可以自行判断。


推荐阅读