javascript 实现sm3哈希算法
各位看官直接上code,随copy随食用。
分别建三个js文件:
- sm_utils.js
var utils = exports
utils.strToBytes = strToBytes
function strToBytes(s) {
var ch, st, re = [];
for (var i = 0; i < s.length; i++ ) {
ch = s.charCodeAt(i); // get char
st = []; // set up "stack"
do {
st.push( ch & 0xFF ); // push byte to stack
ch = ch >> 8; // shift value down by 1 byte
}
while ( ch );
re = re.concat( st.reverse() );
}
return re;
}
- sm_sm3.js
/**
* SM3 hash algorithm
*/
var utils = require('./sm_utils');
/**
* SM3 Hasher
*/
function SM3() {
if (!(this instanceof SM3)) {
return new SM3();
}
this.reg = new Array(8);
this.chunk = [];
this.size = 0;
this.reset();
}
module.exports = SM3;
SM3.prototype.reset = function() {
this.reg[0] = 0x7380166f;
this.reg[1] = 0x4914b2b9;
this.reg[2] = 0x172442d7;
this.reg[3] = 0xda8a0600;
this.reg[4] = 0xa96f30bc;
this.reg[5] = 0x163138aa;
this.reg[6] = 0xe38dee4d;
this.reg[7] = 0xb0fb0e4e;
this.chunk = [];
this.size = 0;
}
/**
* Stream hashin