156 lines
4.1 KiB
JavaScript
156 lines
4.1 KiB
JavaScript
|
|
const CryptoJS = require( "crypto" );
|
|
|
|
let s_key = null;
|
|
|
|
const CCryptoHelp = {
|
|
|
|
_getKey: function() {
|
|
if( !s_key ) {
|
|
s_key = CryptoJS.enc.Utf8.parse( "#KLDf*#!32!~kle1" );
|
|
}
|
|
|
|
return s_key;
|
|
},
|
|
|
|
// AES加密
|
|
encrypt: function( str ) {
|
|
|
|
if( !str || 0 === str.length ) {
|
|
return "";
|
|
}
|
|
|
|
const keyVal = CCryptoHelp._getKey();
|
|
|
|
let encrypted = CryptoJS.AES.encrypt( str, keyVal, {
|
|
iv: null,
|
|
mode: CryptoJS.mode.ECB,
|
|
padding: CryptoJS.pad.ZeroPadding
|
|
} );
|
|
|
|
return encrypted.toString();
|
|
},
|
|
|
|
// AES解密
|
|
decrypt: function( str ) {
|
|
|
|
if( !str || 0 === str.length ) {
|
|
return "";
|
|
}
|
|
|
|
const keyVal = CCryptoHelp._getKey();
|
|
|
|
let decrypt = CryptoJS.AES.decrypt( str, keyVal, {
|
|
iv: null,
|
|
mode: CryptoJS.mode.ECB,
|
|
padding: CryptoJS.pad.ZeroPadding
|
|
} );
|
|
|
|
return CryptoJS.enc.Utf8.stringify( decrypt );
|
|
|
|
// let decryptedStr = decrypt.toString( CryptoJS.enc.Utf8 );
|
|
// return decryptedStr.toString();
|
|
},
|
|
|
|
// MD5加密
|
|
md5FromString: function( str ) {
|
|
|
|
if( !str || 0 === str.length ) {
|
|
return "";
|
|
}
|
|
|
|
return CryptoJS.MD5( str ).toString().toLowerCase();
|
|
},
|
|
|
|
// MD5加密
|
|
md5FromBytes: function( unit8Array ) {
|
|
|
|
if( !unit8Array || 0 === unit8Array.length ) {
|
|
return "";
|
|
}
|
|
|
|
let str = CryptoJS.enc.Hex.stringify( unit8Array );
|
|
return CryptoJS.MD5( str ).toString().toLowerCase();
|
|
},
|
|
|
|
// 十六进制字符串数组,个数如果不足16整数倍则补0
|
|
hexTo16Hex: function( str ) {
|
|
|
|
var diff = 16 - ( str.length + 1 ) / 3 % 16;
|
|
for( var i = 0; i < diff; i++ ) {
|
|
str = str + " 00";
|
|
}
|
|
|
|
return str;
|
|
},
|
|
|
|
// 构建WordArray对象
|
|
int8parse: function( u8arr ) {
|
|
var len = u8arr.length;
|
|
var words = [];
|
|
for( var i = 0; i < len; i++ ) {
|
|
words[ i >>> 2 ] |= ( u8arr[ i ] & 0xff ) << ( 24 - ( i % 4 ) * 8 );
|
|
}
|
|
return CryptoJS.lib.WordArray.create( words, len );
|
|
},
|
|
|
|
// 十六进制字符串(空格分割)转成十进制数字的数组
|
|
hexStrToDecArray: function( str ) {
|
|
var strArray = str.split( " " );
|
|
var decArray = [];
|
|
for( var i = 0; i < strArray.length; i++ ) {
|
|
decArray.push( parseInt( strArray[ i ], 16 ) );
|
|
}
|
|
return CCryptoHelp.arrayTo16Array( decArray );
|
|
},
|
|
|
|
// 十进制数组转成十六进制字符串
|
|
decArrayToHexStr: function( array ) {
|
|
var hexStr = "";
|
|
for( var i = 0; i < array.length; i++ ) {
|
|
var str = array[ i ].toString( 16 ).toUpperCase();
|
|
if( str.length < 2 ) {
|
|
str = "0" + str;
|
|
}
|
|
hexStr = hexStr + str + " ";
|
|
}
|
|
return hexStr.substr( 0, hexStr.length - 1 );
|
|
},
|
|
|
|
// word类型的十进制数组转成十六进制字符串
|
|
wordArrayToHexStr: function( array ) {
|
|
var hexStr = "";
|
|
for( var i = 0; i < array.length; i++ ) {
|
|
var num = array[ i ];
|
|
if( num < 0 ) {
|
|
num = array[ i ] + 0x100000000;
|
|
}
|
|
var str = num.toString( 16 ).toUpperCase();
|
|
var fullStr = str;
|
|
if( str.length < 8 ) {
|
|
for( var j = 0; j < 8 - str.length; j++ ) {
|
|
fullStr = "0" + fullStr;
|
|
}
|
|
}
|
|
hexStr = hexStr + fullStr;
|
|
}
|
|
var ret = "";
|
|
for( var i = 0; i < hexStr.length; i += 2 ) {
|
|
ret = ret + hexStr.substr( i, 2 ) + " "
|
|
}
|
|
return ret.substr( 0, ret.length - 1 );
|
|
},
|
|
|
|
// 数组元素个数必须是16的整数倍,不足的在后面补0
|
|
arrayTo16Array: function( array ) {
|
|
var len = array.length;
|
|
var distLen = parseInt( ( array.length - 1 ) / 16 ) * 16 + 16;
|
|
for( var i = array.length; i < distLen; i++ ) {
|
|
array[ i ] = 0;
|
|
}
|
|
return array;
|
|
},
|
|
|
|
};
|
|
|
|
module.exports = CCryptoHelp; |