Node.js can integrate cryptography with crypto-js. This example shows a few examples.
Node.js Crypto |
Theory
A sample run is:
Message: This is a test Password: qwerty --- Hashes MD5: ce114e4501d2f4e2dcea3e17b546f339 SHA-256: c7be1ed902fb8dd4d48997c6452f5d7e509fbcdbe2808b16bcf4edce4c07d14e SHA-1: a54d88e06612d820bc3be72877c74f257b561b19 SHA-224: ab3efc762195f138d5df56a425405f1d9528a545f9882eeb9c721485 SHA-512: a028d4f74b602ba45eb0a93c9a4677240dcf281a1a9322f183bd32f0bed82ec72de9c3957b2f4c9a1ccf7ed14f85d73498df38017e703d47ebb9f0b3bf116f69 SHA-384: a27c7667e58200d4c0688ea136968404a0da366b1a9fc19bb38a0c7a609a1eef2bcc82837f4f4d92031a66051494b38c ripemd160: 06392dd73da7861c0b23186b718ac8b9a8166b3f --- AES Cipher: U2FsdGVkX18v/JHStyFWsdH6sYTIkqR4Ox1bX5M/zM8= Plaintext: This is a test --- HMAC-SHA1 HMAC: cb8a59d9d01d8a02b7a9e51979afe2b2fc067d7f
The following is some sample code
/// Node.js example Run with: // node crypto.js message ="Hello" password="qwerty" var SHA256 = require("crypto-js/sha256"); var MD5 = require("crypto-js/md5"); var SHA3 = require("crypto-js/sha3"); var SHA1 = require("crypto-js/sha1"); var SHA224 = require("crypto-js/sha224"); var SHA512 = require("crypto-js/sha512"); var SHA384 = require("crypto-js/sha384"); var RIP = require("crypto-js/ripemd160"); var AES = require("crypto-js/aes"); // var DES = require("crypto-js/des"); var TRIPLEDES = require("crypto-js/tripledes"); var RC4 = require("crypto-js/rc4"); var RABBIT = require("crypto-js/rabbit"); var CryptoJS = require("crypto-js"); //var args = process.argv; //if (args.length>1) message=args[2]; //if (args.length>2) password=args[3]; console.log("Message: ",message); console.log("Password: ",password); console.log("\n--- Hashes"); console.log("MD5: ",MD5(message).toString()); console.log("SHA-256: ",SHA256(message).toString()); console.log("SHA-1: ",SHA1(message).toString()); console.log("SHA-224: ",SHA224(message).toString()); console.log("SHA-512: ",SHA512(message).toString()); console.log("SHA-384: ",SHA384(message).toString()); console.log("ripemd160: ",RIP(message).toString()); console.log("\n===== Encryption ====="); console.log("\n--- AES"); var ciphertext = AES.encrypt(message, password); var bytes = AES.decrypt(ciphertext.toString(), password); var plaintext = bytes.toString(CryptoJS.enc.Utf8); console.log("Cipher (ECB): ",ciphertext.toString()); console.log("Plaintext: ",plaintext); // CFB iv=""; var ciphertext = AES.encrypt(message, password,{ iv: iv, mode: CryptoJS.mode.CFB, padding: CryptoJS.pad.Pkcs7 } ) var bytes = AES.decrypt(ciphertext.toString(), password,{ iv: iv, mode: CryptoJS.mode.CFB, padding: CryptoJS.pad.Pkcs7 } ); var plaintext = bytes.toString(CryptoJS.enc.Utf8); console.log("\nCipher (CFB): ",ciphertext.toString()); console.log("Plaintext: ",plaintext); // OFB var ciphertext = AES.encrypt(message, password,{ iv: iv, mode: CryptoJS.mode.OFB, padding: CryptoJS.pad.Pkcs7 } ) var bytes = AES.decrypt(ciphertext.toString(), password,{ iv: iv, mode: CryptoJS.mode.OFB, padding: CryptoJS.pad.Pkcs7 } ); var plaintext = bytes.toString(CryptoJS.enc.Utf8); console.log("\nCipher (OFB): ",ciphertext.toString()); console.log("Plaintext: ",plaintext); // CBC var ciphertext = AES.encrypt(message, password,{ iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 } ) var bytes = AES.decrypt(ciphertext.toString(), password,{ iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 } ); var plaintext = bytes.toString(CryptoJS.enc.Utf8); console.log("\nCipher (CBC): ",ciphertext.toString()); console.log("Plaintext: ",plaintext); // CTR var ciphertext = AES.encrypt(message, password,{ iv: iv, mode: CryptoJS.mode.CTR, padding: CryptoJS.pad.Pkcs7 } ) var bytes = AES.decrypt(ciphertext.toString(), password,{ iv: iv, mode: CryptoJS.mode.CTR, padding: CryptoJS.pad.Pkcs7 } ); var plaintext = bytes.toString(CryptoJS.enc.Utf8); console.log("\nCipher (CTR): ",ciphertext.toString()); console.log("Plaintext: ",plaintext); console.log("\n--- TRIPLEDES"); var ciphertext = TRIPLEDES.encrypt(message, password); var bytes = TRIPLEDES.decrypt(ciphertext.toString(), password); var plaintext = bytes.toString(CryptoJS.enc.Utf8); console.log("Cipher: ",ciphertext.toString()); console.log("Plaintext: ",plaintext); console.log("\n--- RC4"); var ciphertext = RC4.encrypt(message, password); var bytes = RC4.decrypt(ciphertext.toString(), password); var plaintext = bytes.toString(CryptoJS.enc.Utf8); console.log("Cipher: ",ciphertext.toString()); console.log("Plaintext: ",plaintext); console.log("\n--- Rabbit"); var ciphertext = RABBIT.encrypt(message, password); var bytes = RABBIT.decrypt(ciphertext.toString(), password); var plaintext = bytes.toString(CryptoJS.enc.Utf8); console.log("Cipher: ",ciphertext.toString()); console.log("Plaintext: ",plaintext); console.log("\n===== Key Derivation Function (KDF) ====="); console.log("\n--- PBKDF2 ---"); salt=""; var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); console.log("Key (8 bytes - 64 bits, Salt=\"\"): ",key.toString()); console.log("\n--- EVPKDF ---"); salt=""; var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); console.log("Key (8 bytes - 64 bits, Salt=\"\"): ",key.toString()); console.log("\n===== HMAC ====="); console.log("\n--- HMAC-SHA1 ---"); console.log("HMAC: ",CryptoJS.HmacSHA1(message, password).toString()); console.log("\n--- HMAC-MD5 ---"); console.log("HMAC: ",CryptoJS.HmacMD5(message, password).toString()); console.log("\n--- HMAC-SHA256 ---"); console.log("HMAC: ",CryptoJS.HmacSHA256(message, password).toString()); console.log("\n--- HMAC-SHA384 ---"); console.log("HMAC: ",CryptoJS.HmacSHA512(message, password).toString()); console.log("\n--- HMAC-SHA512 ---"); console.log("HMAC: ",CryptoJS.HmacSHA512(message, password).toString()); console.log("\n--- HMAC-SHA3 ---"); console.log("HMAC: ",CryptoJS.HmacSHA3(message, password).toString()); console.log("\n--- HMAC-Ripemd160 ---"); console.log("HMAC: ",CryptoJS.HmacRIPEMD160(message, password).toString());