了解 JSEncrypt

Understanding JSEncrypt

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

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

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

我找不到这个库的任何像样的文档,而且我无法理解源代码的丝毫。非常感谢任何帮助。

与其尝试阅读缩小的代码,不如查看 the homepage linked from npm (and also found as one of my top google hits) which both link to the code in github,它的格式和注释都很好,它应该如此。目前的代码实际上支持 RSA 签名和加密,加上密钥生成和读写 OpenSSL-compatible PEM 文件,虽然根据评论我认为签名可能不在你的版本 2.3.1 中,它不它似乎在这个存储库中或至少没有标记。 RSA核心在 https://github.com/travist/jsencrypt/blob/master/lib/jsbn/rsa.ts clearly shows it uses 'pkcs1' 'type 1' padding for signature and 'type 2' for encryption; these are the schemes from PKCS1 v1.5, now retronymed RSASSA-PKCS1-v1_5 (RSASSA = RSA Signature Scheme with Appendix) and RSAES-PKCS1-v1_5 (RSAES = RSA Encryption Scheme) in current PKCS1 v2. Old-PKCS1 type 1 is deterministic; type 2 is randomized using https://github.com/travist/jsencrypt/blob/master/lib/jsbn/rng.ts你可以自己判断。