'use strict';
var crypto = require('crypto');
/**
* generates random string of characters i.e salt
* @function
* @param {number} length - Length of the random string.
*/
var genRandomString = function(length){
return crypto.randomBytes(Math.ceil(length/2))
.toString('hex') /** convert to hexadecimal format */
.slice(0,length); /** return required number of characters */
};
/**
* hash password with sha512.
* @function
* @param {string} password - List of required fields.
* @param {string} salt - Data to be validated.
*/
var sha512 = function(password, salt){
var hash = crypto.createHmac('sha512', salt); /** Hashing algorithm sha512 */
hash.update(password);
var value = hash.digest('hex');
return {
salt:salt,
passwordHash:value
};
};
function saltHashPassword(userpassword) {
var salt = genRandomString(16); /** Gives us salt of length 16 */
var passwordData = sha512(userpassword, salt);
console.log('UserPassword = '+userpassword);
console.log('Passwordhash = '+passwordData.passwordHash);
console.log('nSalt = '+passwordData.salt);
}
saltHashPassword('MYPASSWORD');
saltHashPassword('MYPASSWORD');
一、使用CBC模式
<script src="./js/crypto-js.js"></script>
<script src="./js/aes.js"></script>
<script>
var key = '3132333435363738393041424344454631323334353637383930414243444566';
console.log('密钥:', key);
key = CryptoJS.enc.Hex.parse(key)
iv = CryptoJS.enc.Hex.parse("30313233343536373839414243444546")
var src = "werty7890";
console.log('原字符串:', src);
var enc = CryptoJS.AES.encrypt(src ,key,{
iv:iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
})
//console.log('加密:',enc.toString());
var enced = enc.ciphertext.toString()
console.log("加密:", enced);
var dec = CryptoJS.AES.decrypt(CryptoJS.format.Hex.parse(enced), key,{
iv:iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
})
console.log('解密:',CryptoJS.enc.Utf8.stringify(dec));
</script>
二、使用ECB模式
<script src="./js/crypto-js.js"></script>
<script src="./js/aes.js"></script>
<script>
var key = '3132333435363738393041424344454631323334353637383930414243444566';
console.log('密钥:', key);
key = CryptoJS.enc.Hex.parse(key)
//iv = CryptoJS.enc.Hex.parse("30313233343536373839414243444546")
//console.log('偏移量:',CryptoJS.enc.Hex.stringify(iv));
var src = "werty7890";
console.log('原字符串:', src);
var enc = CryptoJS.AES.encrypt(src ,key,{
//iv:iv,
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
})
//console.log('加密:',enc.toString());
var enced = enc.ciphertext.toString()
console.log("加密:", enced);
var dec = CryptoJS.AES.decrypt(CryptoJS.format.Hex.parse(enced), key,{
//iv:iv,
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
})
console.log('解密:',CryptoJS.enc.Utf8.stringify(dec));
</script>