You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
261 lines
5.7 KiB
261 lines
5.7 KiB
# crypto-js [](https://travis-ci.org/brix/crypto-js) |
|
|
|
JavaScript library of crypto standards. |
|
|
|
## Node.js (Install) |
|
|
|
Requirements: |
|
|
|
- Node.js |
|
- npm (Node.js package manager) |
|
|
|
```bash |
|
npm install crypto-js |
|
``` |
|
|
|
### Usage |
|
|
|
ES6 import for typical API call signing use case: |
|
|
|
```javascript |
|
import sha256 from 'crypto-js/sha256'; |
|
import hmacSHA512 from 'crypto-js/hmac-sha512'; |
|
import Base64 from 'crypto-js/enc-base64'; |
|
|
|
const message, nonce, path, privateKey; // ... |
|
const hashDigest = sha256(nonce + message); |
|
const hmacDigest = Base64.stringify(hmacSHA512(path + hashDigest, privateKey)); |
|
``` |
|
|
|
Modular include: |
|
|
|
```javascript |
|
var AES = require("crypto-js/aes"); |
|
var SHA256 = require("crypto-js/sha256"); |
|
... |
|
console.log(SHA256("Message")); |
|
``` |
|
|
|
Including all libraries, for access to extra methods: |
|
|
|
```javascript |
|
var CryptoJS = require("crypto-js"); |
|
console.log(CryptoJS.HmacSHA1("Message", "Key")); |
|
``` |
|
|
|
## Client (browser) |
|
|
|
Requirements: |
|
|
|
- Node.js |
|
- Bower (package manager for frontend) |
|
|
|
```bash |
|
bower install crypto-js |
|
``` |
|
|
|
### Usage |
|
|
|
Modular include: |
|
|
|
```javascript |
|
require.config({ |
|
packages: [ |
|
{ |
|
name: 'crypto-js', |
|
location: 'path-to/bower_components/crypto-js', |
|
main: 'index' |
|
} |
|
] |
|
}); |
|
|
|
require(["crypto-js/aes", "crypto-js/sha256"], function (AES, SHA256) { |
|
console.log(SHA256("Message")); |
|
}); |
|
``` |
|
|
|
Including all libraries, for access to extra methods: |
|
|
|
```javascript |
|
// Above-mentioned will work or use this simple form |
|
require.config({ |
|
paths: { |
|
'crypto-js': 'path-to/bower_components/crypto-js/crypto-js' |
|
} |
|
}); |
|
|
|
require(["crypto-js"], function (CryptoJS) { |
|
console.log(CryptoJS.HmacSHA1("Message", "Key")); |
|
}); |
|
``` |
|
|
|
### Usage without RequireJS |
|
|
|
```html |
|
<script type="text/javascript" src="path-to/bower_components/crypto-js/crypto-js.js"></script> |
|
<script type="text/javascript"> |
|
var encrypted = CryptoJS.AES(...); |
|
var encrypted = CryptoJS.SHA256(...); |
|
</script> |
|
``` |
|
|
|
## API |
|
|
|
See: https://cryptojs.gitbook.io/docs/ |
|
|
|
### AES Encryption |
|
|
|
#### Plain text encryption |
|
|
|
```javascript |
|
var CryptoJS = require("crypto-js"); |
|
|
|
// Encrypt |
|
var ciphertext = CryptoJS.AES.encrypt('my message', 'secret key 123').toString(); |
|
|
|
// Decrypt |
|
var bytes = CryptoJS.AES.decrypt(ciphertext, 'secret key 123'); |
|
var originalText = bytes.toString(CryptoJS.enc.Utf8); |
|
|
|
console.log(originalText); // 'my message' |
|
``` |
|
|
|
#### Object encryption |
|
|
|
```javascript |
|
var CryptoJS = require("crypto-js"); |
|
|
|
var data = [{id: 1}, {id: 2}] |
|
|
|
// Encrypt |
|
var ciphertext = CryptoJS.AES.encrypt(JSON.stringify(data), 'secret key 123').toString(); |
|
|
|
// Decrypt |
|
var bytes = CryptoJS.AES.decrypt(ciphertext, 'secret key 123'); |
|
var decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8)); |
|
|
|
console.log(decryptedData); // [{id: 1}, {id: 2}] |
|
``` |
|
|
|
### List of modules |
|
|
|
|
|
- ```crypto-js/core``` |
|
- ```crypto-js/x64-core``` |
|
- ```crypto-js/lib-typedarrays``` |
|
|
|
--- |
|
|
|
- ```crypto-js/md5``` |
|
- ```crypto-js/sha1``` |
|
- ```crypto-js/sha256``` |
|
- ```crypto-js/sha224``` |
|
- ```crypto-js/sha512``` |
|
- ```crypto-js/sha384``` |
|
- ```crypto-js/sha3``` |
|
- ```crypto-js/ripemd160``` |
|
|
|
--- |
|
|
|
- ```crypto-js/hmac-md5``` |
|
- ```crypto-js/hmac-sha1``` |
|
- ```crypto-js/hmac-sha256``` |
|
- ```crypto-js/hmac-sha224``` |
|
- ```crypto-js/hmac-sha512``` |
|
- ```crypto-js/hmac-sha384``` |
|
- ```crypto-js/hmac-sha3``` |
|
- ```crypto-js/hmac-ripemd160``` |
|
|
|
--- |
|
|
|
- ```crypto-js/pbkdf2``` |
|
|
|
--- |
|
|
|
- ```crypto-js/aes``` |
|
- ```crypto-js/tripledes``` |
|
- ```crypto-js/rc4``` |
|
- ```crypto-js/rabbit``` |
|
- ```crypto-js/rabbit-legacy``` |
|
- ```crypto-js/evpkdf``` |
|
|
|
--- |
|
|
|
- ```crypto-js/format-openssl``` |
|
- ```crypto-js/format-hex``` |
|
|
|
--- |
|
|
|
- ```crypto-js/enc-latin1``` |
|
- ```crypto-js/enc-utf8``` |
|
- ```crypto-js/enc-hex``` |
|
- ```crypto-js/enc-utf16``` |
|
- ```crypto-js/enc-base64``` |
|
|
|
--- |
|
|
|
- ```crypto-js/mode-cfb``` |
|
- ```crypto-js/mode-ctr``` |
|
- ```crypto-js/mode-ctr-gladman``` |
|
- ```crypto-js/mode-ofb``` |
|
- ```crypto-js/mode-ecb``` |
|
|
|
--- |
|
|
|
- ```crypto-js/pad-pkcs7``` |
|
- ```crypto-js/pad-ansix923``` |
|
- ```crypto-js/pad-iso10126``` |
|
- ```crypto-js/pad-iso97971``` |
|
- ```crypto-js/pad-zeropadding``` |
|
- ```crypto-js/pad-nopadding``` |
|
|
|
|
|
## Release notes |
|
|
|
### 4.1.1 |
|
|
|
Fix module order in bundled release. |
|
|
|
Include the browser field in the released package.json. |
|
|
|
### 4.1.0 |
|
|
|
Added url safe variant of base64 encoding. [357](https://github.com/brix/crypto-js/pull/357) |
|
|
|
Avoid webpack to add crypto-browser package. [364](https://github.com/brix/crypto-js/pull/364) |
|
|
|
### 4.0.0 |
|
|
|
This is an update including breaking changes for some environments. |
|
|
|
In this version `Math.random()` has been replaced by the random methods of the native crypto module. |
|
|
|
For this reason CryptoJS might not run in some JavaScript environments without native crypto module. Such as IE 10 or before or React Native. |
|
|
|
### 3.3.0 |
|
|
|
Rollback, `3.3.0` is the same as `3.1.9-1`. |
|
|
|
The move of using native secure crypto module will be shifted to a new `4.x.x` version. As it is a breaking change the impact is too big for a minor release. |
|
|
|
### 3.2.1 |
|
|
|
The usage of the native crypto module has been fixed. The import and access of the native crypto module has been improved. |
|
|
|
### 3.2.0 |
|
|
|
In this version `Math.random()` has been replaced by the random methods of the native crypto module. |
|
|
|
For this reason CryptoJS might does not run in some JavaScript environments without native crypto module. Such as IE 10 or before. |
|
|
|
If it's absolute required to run CryptoJS in such an environment, stay with `3.1.x` version. Encrypting and decrypting stays compatible. But keep in mind `3.1.x` versions still use `Math.random()` which is cryptographically not secure, as it's not random enough. |
|
|
|
This version came along with `CRITICAL` `BUG`. |
|
|
|
DO NOT USE THIS VERSION! Please, go for a newer version! |
|
|
|
### 3.1.x |
|
|
|
The `3.1.x` are based on the original CryptoJS, wrapped in CommonJS modules. |
|
|
|
|
|
|