123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- "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;
|