276 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			276 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # crypto-js
 | |
| 
 | |
| JavaScript library of crypto standards.
 | |
| 
 | |
| ## Discontinued
 | |
| 
 | |
| Active development of CryptoJS has been discontinued. This library is no longer maintained.
 | |
| 
 | |
| Nowadays, NodeJS and modern browsers have a native `Crypto` module. The latest version of CryptoJS already uses the native Crypto module for random number generation, since `Math.random()` is not crypto-safe. Further development of CryptoJS would result in it only being a wrapper of native Crypto. Therefore, development and maintenance has been discontinued, it is time to go for the native `crypto` module.
 | |
| 
 | |
| ## 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.2.0
 | |
| 
 | |
| Change default hash algorithm and iteration's for PBKDF2 to prevent weak security by using the default configuration.
 | |
| 
 | |
| Custom KDF Hasher
 | |
| 
 | |
| Blowfish support
 | |
| 
 | |
| ### 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.
 | |
| 
 | |
| 
 |