前端加密库 jsencrypt的使用

网站

http://travistidwell.com/jsencrypt

介绍

在浏览互联网时寻找 RSA Javascript 的良好解决方案 加密,有一大堆库基本上采用了梦幻般的 Tom Wu @ http://www-cs-students.stanford.edu/~tjw/jsbn/ 然后完成的工作 修改该代码以执行他们想要的操作。

然而,我找不到的是这个库的简单包装器 基本上使用库几乎原封不动,但添加了一个包装器来提供对 使用 OpenSSL 生成的实际私钥和公钥对。

这个就是这些努力的结果。

如何使用此库。

这个库应该与 openssl 携手合作。话虽如此,这里是如何使用这个库。

  • 在终端(基于 Unix 的操作系统)中,键入以下内容。
openssl genrsa -out rsa_1024_priv.pem 1024
  • 这将生成一个私钥,您可以通过执行以下操作来查看该私钥…
cat rsa_1024_priv.pem
  • 然后,您可以将其复制并粘贴到 index.html 中的私钥部分。
  • 接下来,您可以通过执行以下命令来获取公钥。
openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem
  • 您可以通过键入…
cat rsa_1024_pub.pem
  • 现在将其复制并粘贴到 index.html 中的公钥中。
  • 现在,您可以通过在代码中执行以下操作来与加密文本相互转换。


  
    JavaScript RSA Encryption
    
    
    
  
  
    






看看 http://www.travistidwell.com/jsencrypt/demo 是如何工作的,以获得更好的想法。 签名和验证的工作方式与此类似。 // Sign with the private key... var sign = new JSEncrypt(); sign.setPrivateKey($('#privkey').val()); var signature = sign.sign($('#input').val(), CryptoJS.SHA256, "sha256"); // Verify with the public key... var verify = new JSEncrypt(); verify.setPublicKey($('#pubkey').val()); var verified = verify.verify($('#input').val(), signature, CryptoJS.SHA256); // Now a simple check to see if the round-trip worked. if (verified) { alert('It works!!!'); } else { alert('Something went wrong....'); }
  • 请注意,您必须提供哈希函数。在此示例中,我们使用 CryptoJS 库中的一个,但您可以使用任何您想要的任何一个。
  • 此外,除非使用自定义哈希函数,否则应为该方法提供哈希类型。可能的值为:、、、、。
  • sign md2 md5 sha1 sha224 sha256 sha384 sha512 ripemd160

其他条件

该图书馆大量利用了 http://www-cs-students.stanford.edu/~tjw/jsbn/ 发现的 Tom Wu 的精彩作品。

这个 jsbn 库是使用原始变量编写的,用于执行加密。这对于加密非常有用,但大多数私钥都使用如下所示的 PEM 格式的私钥。

Base64 格式的 1024 位 RSA 私钥

-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDHikastc8+I81zCg/qWW8dMr8mqvXQ3qbPAmu0RjxoZVI47tvs
kYlFAXOf0sPrhO2nUuooJngnHV0639iTTEYG1vckNaW2R6U5QTdQ5Rq5u+uV3pMk
7w7Vs4n3urQ6jnqt2rTXbC1DNa/PFeAZatbf7ffBBy0IGO0zc128IshYcwIDAQAB
AoGBALTNl2JxTvq4SDW/3VH0fZkQXWH1MM10oeMbB2qO5beWb11FGaOO77nGKfWc
bYgfp5Ogrql4yhBvLAXnxH8bcqqwORtFhlyV68U1y4R+8WxDNh0aevxH8hRS/1X5
031DJm1JlU0E+vStiktN0tC3ebH5hE+1OxbIHSZ+WOWLYX7JAkEA5uigRgKp8ScG
auUijvdOLZIhHWq7y5Wz+nOHUuDw8P7wOTKU34QJAoWEe771p9Pf/GTA/kr0BQnP
QvWUDxGzJwJBAN05C6krwPeryFKrKtjOGJIniIoY72wRnoNcdEEs3HDRhf48YWFo
riRbZylzzzNFy/gmzT6XJQTfktGqq+FZD9UCQGIJaGrxHJgfmpDuAhMzGsUsYtTr
iRox0D1Iqa7dhE693t5aBG010OF6MLqdZA1CXrn5SRtuVVaCSLZEL/2J5UcCQQDA
d3MXucNnN4NPuS/L9HMYJWD7lPoosaORcgyK77bSSNgk+u9WSjbH1uYIAIPSffUZ
bti+jc1dUg5wb+aeZlgJAkEAurrpmpqj5vg087ZngKfFGR5rozDiTsK5DceTV97K
a3Y+Nzl+XWTxDBWk4YPh2ZlKv402hZEfWBYxUDn5ZkH/bw==
-----END RSA PRIVATE KEY-----

该库仅采用以下格式的密钥,并将其转换为执行 Tom Wu 库中使用的加密所需的变量。
这里有一些很好的资源可以进一步调查。

  • http://etherhack.co.uk/asymmetric/docs/rsa_key_breakdown.html
  • http://www.di-mgt.com.au/rsa_alg.html
  • https://polarssl.org/kb/cryptography/asn1-key-structures-in-der-and-pem
    有了这些信息,我们可以将私钥格式转换为变量 Tom Wu 的 jsbn 库需要使用以下映射。
modulus => n
public exponent => e
private exponent => d
prime1 => p
prime2 => q
exponent1 => dmp1
exponent2 => dmq1
coefficient => coeff

你可能感兴趣的:(前端)