# Node-RSA
Node.js RSA library<br/>
Based on jsbn library from Tom Wu http://www-cs-students.stanford.edu/~tjw/jsbn/
* Pure JavaScript
* No needed OpenSSL
* Generating keys
* Supports long messages for encrypt/decrypt
* Signing and verifying
## Example
```javascript
var NodeRSA = require('node-rsa');
var key = new NodeRSA({b: 512});
var text = 'Hello RSA!';
var encrypted = key.encrypt(text, 'base64');
console.log('encrypted: ', encrypted);
var decrypted = key.decrypt(encrypted, 'utf8');
console.log('decrypted: ', decrypted);
```
## Installing
```shell
npm install node-rsa
```
### Testing
```shell
npm test
```
## Work environment
This library developed and tested primary for Node.js, but it still can work in browsers with [browserify](http://browserify.org/).
## Usage
### Create instance
```javascript
var NodeRSA = require('node-rsa');
var key = new NodeRSA([keyData, [format]], [options]);
```
* keyData — `{string|buffer|object}` — parameters for generating key or the key in one of supported formats.<br/>
* format — `{string}` — format for importing key. See more details about formats in [Export/Import](#importexport-keys) section.<br/>
* options — `{object}` — additional settings.
#### Options
You can specify some options by second/third constructor argument, or over `key.setOptions()` method.
* environment — working environment, `'browser'` or `'node'`. Default autodetect.
* encryptionScheme — padding scheme for encrypt/decrypt. Can be `'pkcs1_oaep'` or `'pkcs1'`. Default `'pkcs1_oaep'`.
* signingScheme — scheme used for signing and verifying. Can be `'pkcs1'` or `'pss'` or 'scheme-hash' format string (eg `'pss-sha1'`). Default `'pkcs1-sha256'`, or, if chosen pss: `'pss-sha1'`.
**Advanced options:**<br/>
You also can specify advanced options for some schemes like this:
```javascript
options = {
encryptionScheme: {
scheme: 'pkcs1_oaep', //scheme
hash: 'md5', //hash using for scheme
mgf: function(...) {...} //mask generation function
},
signingScheme: {
scheme: 'pss', //scheme
hash: 'sha1', //hash using for scheme
saltLength: 20 //salt length for pss sign
}
}
```
This lib supporting next hash algorithms: `'md5'`, `'ripemd160'`, `'sha1'`, `'sha256'`, `'sha512'` in browser and node environment and additional `'md4'`, `'sha'`, `'sha224'`, `'sha384'` in node only.
#### Creating "empty" key
```javascript
var key = new NodeRSA();
```
#### Generate new key 512bit-length and with public exponent 65537
```javascript
var key = new NodeRSA({b: 512});
```
Also you can use next method:
```javascript
key.generateKeyPair([bits], [exp]);
```
* bits — `{int}` — key size in bits. 2048 by default.
* exp — `{int}` — public exponent. 65537 by default.
#### Load key from PEM string
```javascript
var key = new NodeRSA('-----BEGIN RSA PRIVATE KEY-----\n'+
'MIIBOQIBAAJAVY6quuzCwyOWzymJ7C4zXjeV/232wt2ZgJZ1kHzjI73wnhQ3WQcL\n'+
'DFCSoi2lPUW8/zspk0qWvPdtp6Jg5Lu7hwIDAQABAkBEws9mQahZ6r1mq2zEm3D/\n'+
'VM9BpV//xtd6p/G+eRCYBT2qshGx42ucdgZCYJptFoW+HEx/jtzWe74yK6jGIkWJ\n'+
'AiEAoNAMsPqwWwTyjDZCo9iKvfIQvd3MWnmtFmjiHoPtjx0CIQCIMypAEEkZuQUi\n'+
'pMoreJrOlLJWdc0bfhzNAJjxsTv/8wIgQG0ZqI3GubBxu9rBOAM5EoA4VNjXVigJ\n'+
'QEEk1jTkp8ECIQCHhsoq90mWM/p9L5cQzLDWkTYoPI49Ji+Iemi2T5MRqwIgQl07\n'+
'Es+KCn25OKXR/FJ5fu6A6A+MptABL3r8SEjlpLc=\n'+
'-----END RSA PRIVATE KEY-----');
```
### Import/Export keys
```javascript
key.importKey(keyData, [format]);
key.exportKey([format]);
```
* keyData — `{string|buffer}` — key in PEM string **or** Buffer containing PEM string **or** Buffer containing DER encoded data.
* format — `{string}` — format id for export/import.
#### Format string syntax
Format string composed of several parts: `scheme-[key_type]-[output_type]`<br/>
Scheme — NodeRSA supports multiple format schemes for import/export keys:
* `'pkcs1'` — public key starts from `'-----BEGIN RSA PUBLIC KEY-----'` header and private key starts from `'-----BEGIN RSA PRIVATE KEY-----' header`
* `'pkcs8'` — public key starts from `'-----BEGIN PUBLIC KEY-----'` header and private key starts from `'-----BEGIN PRIVATE KEY-----' header`
Key type — can be `'private'` or `'public'`. Default `'private'`<br/>
Output type — can be:
* `'pem'` — Base64 encoded string with header and footer. Used by default.
* `'der'` — Binary encoded key data.
**Notice:** For import, if *keyData* is PEM string or buffer containing string, you can do not specify format, but if you provide *keyData* as DER you must specify it in format string.
**Shortcuts and examples**
* `'private'` or `'pkcs1'` or `'pkcs1-private'` == `'pkcs1-private-pem'` — private key encoded in pcks1 scheme as pem string.
* `'public'` or `'pkcs8-public'` == `'pkcs8-public-pem'` — public key encoded in pcks8 scheme as pem string.
* `'pkcs8'` or `'pkcs8-private'` == `'pkcs8-private-pem'` — private key encoded in pcks8 scheme as pem string.
* `'pkcs1-der'` == `'pkcs1-private-der'` — private key encoded in pcks1 scheme as binary buffer.
* `'pkcs8-public-der'` — public key encoded in pcks8 scheme as binary buffer.
**Code example**
```javascript
var keyData = '-----BEGIN PUBLIC KEY----- ... -----BEGIN PRIVATE KEY-----';
key.importKey(keyData, 'pkcs8');
var publicDer = key.exportKey('pkcs8-public-der');
var privateDer = key.exportKey('pkcs1-der');
```
### Properties
#### Key testing
```javascript
key.isPrivate();
key.isPublic([strict]);
```
strict — `{boolean}` — if true method will return false if key pair have private exponent. Default `false`.
```javascript
key.isEmpty();
```
Return `true` if key pair doesn't have any data.
#### Key info
```javascript
key.getKeySize();
```
Return key size in bits.
```javascript
key.getMaxMessageSize();
```
Return max data size for encrypt in bytes.
### Encrypting/decrypting
```javascript
key.encrypt(buffer, [encoding], [source_encoding]);
```
Return encrypted data.<br/>
* buffer — `{buffer}` — data for encrypting, may be string, Buffer, or any object/array. Arrays and objects will encoded to JSON string first.<br/>
* encoding — `{string}` — encoding for output result, may be `'buffer'`, `'binary'`, `'hex'` or `'base64'`. Default `'buffer'`.<br/>
* source_encoding — `{string}` — source encoding, works only with string buffer. Can take standard Node.js Buffer encodings (hex, utf8, base64, etc). `'utf8'` by default.<br/>
```javascript
key.decrypt(buffer, [encoding]);
```
Return decrypted data.<br/>
* buffer — `{buffer}` — data for decrypting. Takes Buffer object or base64 encoded string.<br/>
* encoding — `{string}` — encoding for result string. Can also take `'buffer'` for raw Buffer object, or `'json'` for automatic JSON.parse result. Default `'buffer'`.
### Signing/Verifying
```javascript
key.sign(buffer, [encoding], [source_encoding]);
```
Return signature for buffer. All the arguments are the same as for `encrypt` method.
```javascript
key.verify(buffer, signature, [source_encoding], [signature_encoding])
```
Return result of check, `true` or `false`.<br/>
* buffer — `{buffer}` — data for check, same as `encrypt` method.<br/>
* signature — `{string}` — signature for check, result of `sign` method.<br/>
* source_encoding — `{string}` — same as for `encrypt` method.<br/>
* signature_encoding — `{string}` — encoding of given signature. May be `'buffer'`, `'binary'`, `'hex'` or `'base64'`. Default `'buffer'`.
## Contributing
Questions, comments, bug reports, and pull requests are all welcome.
## Changelog
### 0.2.10
* **Methods `.exportPrivate()` and `.exportPu
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
node.js与飞秋的通讯,RSA、blowfish加密解密消息。 下载代码 局域网内找台计算机运行飞秋 然后本机运行node testfeiq.js,远端计算机飞秋上发条消息给本机完成消息的加密解密测试。 详见博客 http://blog.csdn.net/lady911/article/details/44830135
资源推荐
资源详情
资源评论
收起资源包目录
nodefeiq.rar (76个子文件)
nodefeiq
node.exe 8.98MB
node_modules
node-rsa
gruntfile.js 823B
package.json 13KB
node_modules
asn1
.travis.yml 44B
package.json 2KB
LICENSE 1KB
.npmignore 19B
lib
index.js 320B
ber
index.js 469B
writer.js 7KB
types.js 638B
reader.js 5KB
errors.js 239B
README.md 1KB
tst
ber
reader.test.js 6KB
writer.test.js 9KB
lodash
lodash.js 240KB
package.json 12KB
dist
lodash.underscore.js 156KB
lodash.underscore.min.js 18KB
lodash.js 224KB
lodash.compat.js 238KB
lodash.compat.min.js 31KB
lodash.min.js 27KB
README.md 10KB
LICENSE.txt 1KB
test
private_pkcs1.pem 900B
tests.js 30KB
keys
private_pkcs1.pem 900B
private_pkcs8.der 634B
public_pkcs8.der 162B
public_pkcs1.pem 254B
private_pkcs1.der 608B
public_pkcs1.der 140B
public_pkcs8.pem 276B
private_pkcs8.pem 930B
src
utils.js 1KB
schemes
schemes.js 599B
pss.js 6KB
pkcs1.js 6KB
oaep.js 6KB
formats
formats.js 3KB
pkcs8.js 6KB
pkcs1.js 5KB
NodeRSA.js 13KB
libs
jsbn.js 42KB
rsa.js 11KB
.npmignore 37B
README.md 11KB
iconv-lite
Changelog.md 1KB
.travis.yml 65B
encodings
dbcs-data.js 8KB
sbcs-data-generated.js 31KB
index.js 696B
internal.js 2KB
utf7.js 9KB
sbcs-data.js 4KB
tables
big5-added.json 17KB
cp949.json 37KB
gb18030-ranges.json 2KB
shiftjis.json 23KB
cp936.json 46KB
eucjp.json 40KB
cp950.json 41KB
gbk-added.json 1KB
utf16.js 5KB
dbcs-codec.js 21KB
sbcs-codec.js 2KB
package.json 8KB
LICENSE 1KB
.npmignore 44B
lib
index.js 4KB
streams.js 3KB
extend-node.js 8KB
README.md 5KB
testfeiq.js 4KB
共 76 条
- 1
资源评论
lady911
- 粉丝: 5
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- March 2024 Expiration Of The OAM Out Of The Box Certificates
- 二叉搜索树迭代器(java代码).docx
- 解决keil MDK 5.38版本 在Debug配置使用STlink调试时软件闪退的问题
- py小项目:用户登录和注册系统开发欢迎图片
- TCCEE-x64-v6.2.3(9.51)
- 准考证.pdf.lnk
- 动态内存分配 实验设计.cpp
- 使用STM32F103C8T6+L298N+MG513P30电机使用外部中断法和输入捕获法进行编码器测速
- python入门python-Day25.rar
- python入门python-Day24.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功