You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
'use strict';
const baseEncodeTables = { 26: 'abcdefghijklmnopqrstuvwxyz', 32: '123456789abcdefghjkmnpqrstuvwxyz', // no 0lio
36: '0123456789abcdefghijklmnopqrstuvwxyz', 49: 'abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ', // no lIO
52: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 58: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ', // no 0lIO
62: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 64: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_', };
function encodeBufferToBase(buffer, base) { const encodeTable = baseEncodeTables[base]; if (!encodeTable) { throw new Error('Unknown encoding base' + base); }
const readLength = buffer.length; const Big = require('big.js');
Big.RM = Big.DP = 0; let b = new Big(0);
for (let i = readLength - 1; i >= 0; i--) { b = b.times(256).plus(buffer[i]); }
let output = ''; while (b.gt(0)) { output = encodeTable[b.mod(base)] + output; b = b.div(base); }
Big.DP = 20; Big.RM = 1;
return output; }
function getHashDigest(buffer, hashType, digestType, maxLength) { hashType = hashType || 'md5'; maxLength = maxLength || 9999;
const hash = require('crypto').createHash(hashType);
hash.update(buffer);
if ( digestType === 'base26' || digestType === 'base32' || digestType === 'base36' || digestType === 'base49' || digestType === 'base52' || digestType === 'base58' || digestType === 'base62' || digestType === 'base64' ) { return encodeBufferToBase(hash.digest(), digestType.substr(4)).substr( 0, maxLength ); } else { return hash.digest(digestType || 'hex').substr(0, maxLength); } }
module.exports = getHashDigest;
|