zutils/dist/utils/security.util.cjs.map
2024-01-23 19:29:44 +08:00

1 line
12 KiB
Plaintext

{"version":3,"sources":["../../src/utils/security.util.ts","../../src/utils/string.util.ts"],"sourcesContent":["import crypto from 'crypto'\nimport CryptoJS from 'crypto-js'\nimport { compressUuid } from './string.util'\n\n/**\n * use crypto.randomBytes to generate random string\n * @param length\n * @returns\n */\nexport function genRandomString(length: number) {\n return crypto\n .randomBytes(Math.ceil(length / 2))\n .toString('hex')\n .slice(0, length)\n}\n\n/**\n * 根据概率数组获取随机index\n * @since 1.0.0\n * @param prob_array 概率数组\n */\nexport function randomWithProb(prob_array: number[]): number {\n let total = 0\n for (let _d of prob_array) {\n total += _d\n }\n prob_array = prob_array.map(o => o / total)\n // 获取随机数\n let r = Math.random()\n // 对概率数组的处理\n let s = prob_array\n .map((v, index) => {\n return { index: index, prob: v }\n })\n .sort((a, b) => a.prob - b.prob)\n // 判断随机位置\n let result = s.find(v => (r -= v.prob) <= 0)\n return result ? result.index : s.length - 1\n}\n\nexport function uuid() {\n return crypto.randomUUID()\n}\n\nexport function shortUuid() {\n let uid = uuid()\n return compressUuid(uid)\n}\n\nexport function hmac(input: string, key: string, out: 'base64' | 'base64url' | 'hex' | 'binary') {\n return out\n ? crypto.createHmac('sha1', key).update(input).digest(out)\n : crypto.createHmac('sha1', key).update(input).digest('hex')\n}\n\nexport function md5(str: string) {\n const md5sum = crypto.createHash('md5')\n md5sum.update(str)\n str = md5sum.digest('hex')\n return str\n}\n\nexport function sha1(str: string) {\n const md5sum = crypto.createHash('sha1')\n md5sum.update(str)\n str = md5sum.digest('hex')\n return str\n}\n\nexport function sha512(password: string, salt: string) {\n let hash = crypto.createHmac('sha512', salt)\n hash.update(password)\n let value = hash.digest('hex')\n return {\n salt: salt,\n passwordHash: value,\n }\n}\n\nexport function sha3_256(str: string) {\n let hash = crypto.createHash('sha3-256')\n hash.update(str)\n return hash.digest('hex')\n}\n\nexport function hmacSha256(str: string, key: any) {\n const md5sum = crypto.createHmac('sha256', key)\n md5sum.update(str)\n const data = md5sum.digest('hex')\n console.log(`HmacSHA256 rawContent is [${str}], key is [${key}], hash result is [${data}]`)\n return data\n}\n\nexport const aesEncrypt = (plaintText: string, key) => {\n key = CryptoJS.SHA1(key).toString().substring(0, 16)\n key = CryptoJS.enc.Base64.parse(key)\n let encryptedData = CryptoJS.AES.encrypt(plaintText, key, {\n mode: CryptoJS.mode.ECB,\n padding: CryptoJS.pad.Pkcs7,\n })\n\n return encryptedData.toString(CryptoJS.format.Hex)\n}\n\nexport const aesDecrypt = (encryptedDataHexStr, key) => {\n key = CryptoJS.SHA1(key).toString().substring(0, 16)\n key = CryptoJS.enc.Base64.parse(key)\n let encryptedHex = CryptoJS.enc.Hex.parse(encryptedDataHexStr)\n let encryptedBase64 = CryptoJS.enc.Base64.stringify(encryptedHex)\n\n var decryptedData = CryptoJS.AES.decrypt(encryptedBase64, key, {\n mode: CryptoJS.mode.ECB,\n padding: CryptoJS.pad.Pkcs7,\n })\n\n return decryptedData.toString(CryptoJS.enc.Utf8)\n}\n\nexport function createSign(secretKey: string, paramStr: string, timestamp: number) {\n paramStr = `${paramStr}:${timestamp}:${secretKey}`\n return sha1(paramStr)\n}\n\nexport function checkSign({\n secretKey,\n data,\n sign,\n signKeys,\n}: {\n secretKey: string\n data: {}\n sign: string\n signKeys: string[]\n}) {\n signKeys.sort()\n let signStr = ''\n for (let key of signKeys) {\n if (signStr.length > 0) {\n signStr += '&'\n }\n signStr += `${key}=${data[key]}`\n }\n console.log(signStr)\n let sign1 = hmacSha256(signStr, secretKey)\n return sign1 === sign\n}\n","/**\n * 判断传入的值是否为true\n * @param {Object} obj 传入值为'true','TRUE',1,'1','on','ON','YES','yes'时,返回true,其他值均返回false\n * @return {boolean}\n */\nexport function isTrue(obj: any): boolean {\n return (\n obj === 'true' ||\n obj === 'TRUE' ||\n obj === 'True' ||\n obj === 'on' ||\n obj === 'ON' ||\n obj === true ||\n obj === 1 ||\n obj === '1' ||\n obj === 'YES' ||\n obj === 'yes'\n )\n}\n\n/**\n * 验证ObjectId格式是否正确\n * @param {string} id\n * @return {boolean}\n */\nexport function isObjectId(id: string): boolean {\n //mongoose.Types.ObjectId.isValid(id)\n return /^[a-fA-F0-9]{24}$/.test(id)\n}\n\nconst base62Alphabet = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'\n/**\n * 10进制 -> 62进制\n * @param {string | number} number\n * @return {string}\n */\nexport function string10to62(number: string | number): string {\n const chars = base62Alphabet.split('')\n const radix = chars.length\n let qutient = +number\n const arr = []\n do {\n const mod = qutient % radix\n qutient = (qutient - mod) / radix\n arr.unshift(chars[mod])\n } while (qutient)\n return arr.join('')\n}\n\n/**\n * 62进制 -> 10 进制\n * @param {string} numberCode\n * @return {number}\n */\nexport function string62to10(numberCode: string): number {\n const chars = base62Alphabet\n const radix = chars.length\n numberCode = numberCode + ''\n const len = numberCode.length\n let i = 0\n let originNumber = 0\n while (i < len) {\n originNumber += Math.pow(radix, i++) * (chars.indexOf(numberCode.charAt(len - i)) || 0)\n }\n return originNumber\n}\n\nconst base58Alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\nexport const hexToBase58 = (hexString: string) => {\n const bytes = hexString.match(/.{1,2}/g).map(byte => parseInt(byte, 16))\n let base58String = ''\n\n let num = BigInt('0x' + hexString)\n while (num > BigInt(0)) {\n const remainder = num % BigInt(58)\n num = num / BigInt(58)\n base58String = base58Alphabet[Number(remainder)] + base58String\n }\n\n return base58String\n}\n\nexport const base58ToHex = (base58String: string) => {\n const base58Length = base58String.length\n let num = BigInt(0)\n for (let i = 0; i < base58Length; i++) {\n const charIndex = base58Alphabet.indexOf(base58String[i])\n if (charIndex === -1) {\n throw new Error('Invalid Base58 string')\n }\n\n num = num * BigInt(58) + BigInt(charIndex)\n }\n return num.toString(16)\n}\n\nexport const hexToBase32 = (hexString: string) => {\n const bytes = hexString.match(/.{1,2}/g).map(byte => parseInt(byte, 16))\n const base32Alphabet = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'\n let base32String = ''\n\n let num = BigInt('0x' + hexString)\n while (num > BigInt(0)) {\n const remainder = num % BigInt(32)\n num = num / BigInt(32)\n base32String = base32Alphabet[Number(remainder)] + base32String\n }\n\n return base32String\n}\n\nconst reNormalUUID = /^[0-9a-fA-F-]{36}$/\nconst reLongUUID = /^[0-9a-fA-F]{32}$/\nconst reShortUUID = /^[0-9a-zA-Z+/]{22,23}$/\nconst n = /-/g\n\nexport function compressUuid(e: string, t: boolean = false) {\n if (reNormalUUID.test(e)) {\n e = e.replace(n, '')\n } else if (!reLongUUID.test(e)) {\n return e\n }\n var r = !0 === t ? 2 : 5\n return compressHex(e, r)\n}\n\nconst CHARS_BASE64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nexport function compressHex(e: string, r: number) {\n var i,\n n = e.length\n i = void 0 !== r ? r : n % 3\n for (var s = e.slice(0, i), o = []; i < n; ) {\n var u = parseInt(e[i], 16),\n a = parseInt(e[i + 1], 16),\n c = parseInt(e[i + 2], 16)\n o.push(CHARS_BASE64[(u << 2) | (a >> 2)])\n o.push(CHARS_BASE64[((3 & a) << 4) | c])\n i += 3\n }\n return s + o.join('')\n}\n\nexport function isUUID(uuid: string) {\n return reNormalUUID.test(uuid)\n}\n\nexport function hexToUtf8(hexString: string) {\n // Remove any leading \"0x\" prefix and split into pairs of characters\n let _hexString = hexString.replace(/^0x/, '')\n let buffer = Buffer.from(_hexString, 'hex')\n return buffer.toString('utf8')\n}\n\nexport function utf8ToHex(utf8String: string) {\n // Create a Buffer object from the UTF-8 string\n const buffer = Buffer.from(utf8String, 'utf8')\n\n // Convert the Buffer object to a hex string\n const hexString = buffer.toString('hex')\n\n return hexString\n}\n\n/**\n * 判断是否是json格式的字符串\n * @param {string} str\n * @return {boolean}\n */\nexport function isJsonString(str: string): boolean {\n try {\n if (typeof JSON.parse(str) == 'object') {\n return true\n }\n } catch (e) {}\n return false\n}\n/**\n * 检查accountId是否符合规则\n * 4位渠道id_4位游戏id_openid\n * @param accountId\n * @returns\n */\nexport function checkAccountId(accountId: string) {\n return /^\\d{4}_\\d{4,6}_.+$/.test(accountId)\n}\n/**\n * 将accountId拆分出 渠道id, 游戏id, 和openId\n * @param accountId\n * @returns\n */\nexport function parseGameAccountId(accountId: string) {\n const arr = accountId.split('_')\n const gameId = arr[1]\n const channel = arr[0]\n const openId = arr[2]\n return { gameId, channel, openId }\n}\n\nexport function checkAddress(address: string) {\n return /^0x[0-9a-fA-F]{40}$/.test(address)\n}\n"],"mappings":"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","names":["n","crypto","CryptoJS"]}