Website
======================
http://travistidwell.com/jsencrypt
Introduction
======================
When browsing the internet looking for a good solution to RSA Javascript
encryption, there is a whole slew of libraries that basically take the fantastic
work done by Tom Wu @ http://www-cs-students.stanford.edu/~tjw/jsbn/ and then
modify that code to do what they want.
What I couldn't find, however, was a simple wrapper around this library that
basically uses the library <a href="https://github.com/travist/jsencrypt/pull/6">practically</a> untouched, but adds a wrapper to provide parsing of
actual Private and Public key-pairs generated with OpenSSL.
This library is the result of these efforts.
How to use this library.
=======================
This library should work hand-in-hand with openssl. With that said, here is how to use this library.
- Within your terminal (Unix based OS) type the following.
```
openssl genrsa -out rsa_1024_priv.pem 1024
```
- This generates a private key, which you can see by doing the following...
```
cat rsa_1024_priv.pem
```
- You can then copy and paste this in the Private Key section of within index.html.
- Next, you can then get the public key by executing the following command.
```
openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem
```
- You can see the public key by typing...
```
cat rsa_1024_pub.pem
```
- Now copy and paste this in the Public key within the index.html.
- Now you can then convert to and from encrypted text by doing the following in code.
```html
<!doctype html>
<html>
<head>
<title>JavaScript RSA Encryption</title>
<script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<script src="bin/jsencrypt.min.js"></script>
<script type="text/javascript">
// Call this code when the page is done loading.
$(function() {
// Run a quick encryption/decryption when they click.
$('#testme').click(function() {
// Encrypt with the public key...
var encrypt = new JSEncrypt();
encrypt.setPublicKey($('#pubkey').val());
var encrypted = encrypt.encrypt($('#input').val());
// Decrypt with the private key...
var decrypt = new JSEncrypt();
decrypt.setPrivateKey($('#privkey').val());
var uncrypted = decrypt.decrypt(encrypted);
// Now a simple check to see if the round-trip worked.
if (uncrypted == $('#input').val()) {
alert('It works!!!');
}
else {
alert('Something went wrong....');
}
});
});
</script>
</head>
<body>
<label for="privkey">Private Key</label><br/>
<textarea id="privkey" rows="15" cols="65">-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDlOJu6TyygqxfWT7eLtGDwajtNFOb9I5XRb6khyfD1Yt3YiCgQ
WMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76xFxdU6jE0NQ+Z+zEdhUTooNR
aY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4gwQco1KRMDSmXSMkDwIDAQAB
AoGAfY9LpnuWK5Bs50UVep5c93SJdUi82u7yMx4iHFMc/Z2hfenfYEzu+57fI4fv
xTQ//5DbzRR/XKb8ulNv6+CHyPF31xk7YOBfkGI8qjLoq06V+FyBfDSwL8KbLyeH
m7KUZnLNQbk8yGLzB3iYKkRHlmUanQGaNMIJziWOkN+N9dECQQD0ONYRNZeuM8zd
8XJTSdcIX4a3gy3GGCJxOzv16XHxD03GW6UNLmfPwenKu+cdrQeaqEixrCejXdAF
z/7+BSMpAkEA8EaSOeP5Xr3ZrbiKzi6TGMwHMvC7HdJxaBJbVRfApFrE0/mPwmP5
rN7QwjrMY+0+AbXcm8mRQyQ1+IGEembsdwJBAN6az8Rv7QnD/YBvi52POIlRSSIM
V7SwWvSK4WSMnGb1ZBbhgdg57DXaspcwHsFV7hByQ5BvMtIduHcT14ECfcECQATe
aTgjFnqE/lQ22Rk0eGaYO80cc643BXVGafNfd9fcvwBMnk0iGX0XRsOozVt5Azil
psLBYuApa66NcVHJpCECQQDTjI2AQhFc1yRnCU/YgDnSpJVm1nASoRUnU8Jfm3Oz
uku7JUXcVpt08DFSceCEX9unCuMcT72rAQlLpdZir876
-----END RSA PRIVATE KEY-----</textarea><br/>
<label for="pubkey">Public Key</label><br/>
<textarea id="pubkey" rows="15" cols="65">-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlOJu6TyygqxfWT7eLtGDwajtN
FOb9I5XRb6khyfD1Yt3YiCgQWMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76
xFxdU6jE0NQ+Z+zEdhUTooNRaY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4
gwQco1KRMDSmXSMkDwIDAQAB
-----END PUBLIC KEY-----</textarea><br/>
<label for="input">Text to encrypt:</label><br/>
<textarea id="input" name="input" type="text" rows=4 cols=70>This is a test!</textarea><br/>
<input id="testme" type="button" value="Test Me!!!" /><br/>
</body>
</html>
```
- Look at how http://www.travistidwell.com/jsencrypt/demo works to get a better idea.
- Signing and verification works in a similar way.
```javascript
// 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....');
}
```
- Note that you have to provide the hash function. In this example we use one from the [CryptoJS](https://github.com/brix/crypto-js) library, but you can use whichever you want.
- Also, unless you use a custom hash function, you should provide the hash type to the `sign` method. Possible values are: `md2`, `md5`, `sha1`, `sha224`, `sha256`, `sha384`, `sha512`, `ripemd160`.
Other Information
========================
This library heavily utilizes the wonderful work of Tom Wu found at http://www-cs-students.stanford.edu/~tjw/jsbn/.
This jsbn library was written using the raw variables to perform encryption. This is great for encryption, but most private keys use a Private Key in the PEM format seen below.
1024 bit RSA Private Key in Base64 Format
-----------------------------------------
```
-----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-----
```
This library simply takes keys in the following format, and translates it to those variables needed to perform the encryptions used in Tom Wu's library.
Here are some good resources to investigate further.
- 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
With this information, we can translate a private key format to the variables
required with the jsbn library from Tom Wu by using the following mappings.
```
modulus => n
public exponent => e
private exponent => d
prime1 => p
prime2 => q
exponent1 => dmp1
exponent2 => dmq1
coefficient => coeff
```
没有合适的资源?快使用搜索试试~ 我知道了~
jquery1.10.x jsencrypt 前端rsa加密
共88个文件
ts:29个
js:28个
html:6个
需积分: 5 0 下载量 133 浏览量
2023-08-28
14:45:03
上传
评论
收藏 520KB ZIP 举报
温馨提示
jquery jsencrypt 前端rsa加密
资源推荐
资源详情
资源评论
收起资源包目录
jsencrypt-master.zip (88个子文件)
jsencrypt-master
yarn.lock 83KB
lib
lib
jsbn
rng.d.ts 73B
rsa.d.ts 987B
rng.js 3KB
prng4.js 1KB
base64.d.ts 159B
base64.js 2KB
prng4.d.ts 236B
util.d.ts 401B
jsbn.d.ts 4KB
jsbn.js 52KB
rsa.js 12KB
util.js 1KB
jsrsasign
yahoo.js 3KB
asn1-1.0.js 55KB
asn1js
base64.d.ts 117B
asn1.d.ts 2KB
oids.d.ts 179KB
hex.d.ts 64B
base64.js 3KB
asn1.js 20KB
int10.d.ts 247B
oids.js 188KB
int10.js 3KB
hex.js 2KB
JSEncrypt.d.ts 5KB
index.d.ts 89B
version.json 20B
JSEncryptRSAKey.js 13KB
JSEncrypt.js 7KB
JSEncryptRSAKey.d.ts 6KB
index.js 89B
_config.yml 35B
.github
FUNDING.yml 82B
webpack.config.js 1KB
LICENSE.txt 5KB
src
lib
jsbn
LICENSE.txt 2KB
prng4.ts 1KB
rng.ts 2KB
rsa.ts 13KB
base64.ts 2KB
jsbn.ts 51KB
README.md 177B
util.ts 1KB
jsrsasign
asn1-1.0.d.ts 1KB
LICENSE.txt 1KB
yahoo.js 3KB
asn1-1.0.js 55KB
asn1js
LICENSE.txt 776B
int10.ts 3KB
base64.ts 3KB
hex.ts 2KB
asn1.ts 20KB
oids.ts 181KB
LICENSE.txt 1KB
JSEncrypt.ts 7KB
JSEncryptRSAKey.ts 12KB
index.ts 88B
_includes
navbar.html 1KB
_config.build.yml 13B
example.html 3KB
webpack.test.js 1010B
demo
index.html 5KB
_layouts
default.html 1KB
package.json 2KB
bin
jsencrypt.min.js.LICENSE.txt 239B
jsencrypt.js 208KB
jsencrypt.min.js 56KB
.prettierrc.json 155B
Gemfile 97B
.npmignore 135B
index.html 6KB
test
test.rsa.bundle.js 622KB
libs
mocha.js 490KB
mocha.css 5KB
index.js 36KB
generate_test_keys.sh 343B
index.html 448B
pkcs1.pub 251B
babel-register.js 165B
test.rsa.js 15KB
tsconfig-def.json 1KB
.gitignore 229B
Gemfile.lock 7KB
tsconfig.json 2KB
README.md 7KB
.mocharc.json 203B
webpack.prod.js 147B
共 88 条
- 1
资源评论
l_zhuawa
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功