// src/utils/security.util.ts import crypto from "crypto"; import CryptoJS from "crypto-js"; function hmac(input, key, out) { return out ? crypto.createHmac("sha1", key).update(input).digest(out) : crypto.createHmac("sha1", key).update(input).digest("hex"); } function genRandomString(length) { return crypto.randomBytes(Math.ceil(length / 2)).toString("hex").slice(0, length); } function sha512(password, salt) { let hash = crypto.createHmac("sha512", salt); hash.update(password); let value = hash.digest("hex"); return { salt, passwordHash: value }; } function sha1(str) { const md5sum = crypto.createHash("sha1"); md5sum.update(str); str = md5sum.digest("hex"); return str; } function hmacSha256(str, key) { const md5sum = crypto.createHmac("sha256", key); md5sum.update(str); const data = md5sum.digest("hex"); console.log(`HmacSHA256 rawContent is [${str}], key is [${key}], hash result is [${data}]`); return data; } function md5(str) { const md5sum = crypto.createHash("md5"); md5sum.update(str); str = md5sum.digest("hex"); return str; } function createSign(secretKey, paramStr, timestamp) { paramStr = `${paramStr}:${timestamp}:${secretKey}`; return sha1(paramStr); } function checkSign({ secretKey, data, sign, signKeys }) { signKeys.sort(); let signStr = ""; for (let key of signKeys) { if (signStr.length > 0) { signStr += "&"; } signStr += `${key}=${data[key]}`; } console.log(signStr); let sign1 = hmacSha256(signStr, secretKey); return sign1 === sign; } var aesEncrypt = (plaintText, key) => { key = CryptoJS.SHA1(key).toString().substring(0, 16); key = CryptoJS.enc.Base64.parse(key); let encryptedData = CryptoJS.AES.encrypt(plaintText, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return encryptedData.toString(CryptoJS.format.Hex); }; var aesDecrypt = (encryptedDataHexStr, key) => { key = CryptoJS.SHA1(key).toString().substring(0, 16); key = CryptoJS.enc.Base64.parse(key); let encryptedHex = CryptoJS.enc.Hex.parse(encryptedDataHexStr); let encryptedBase64 = CryptoJS.enc.Base64.stringify(encryptedHex); var decryptedData = CryptoJS.AES.decrypt(encryptedBase64, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return decryptedData.toString(CryptoJS.enc.Utf8); }; var base58Alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; var hexToBase58 = (hexString) => { const bytes = hexString.match(/.{1,2}/g).map((byte) => parseInt(byte, 16)); let base58String = ""; let num = BigInt("0x" + hexString); while (num > BigInt(0)) { const remainder = num % BigInt(58); num = num / BigInt(58); base58String = base58Alphabet[Number(remainder)] + base58String; } return base58String; }; var base58ToHex = (base58String) => { const base58Length = base58String.length; let num = BigInt(0); let leadingZeros = 0; for (let i = 0; i < base58Length; i++) { const charIndex = base58Alphabet.indexOf(base58String[i]); if (charIndex === -1) { throw new Error("Invalid Base58 string"); } num = num * BigInt(58) + BigInt(charIndex); } return num.toString(16); }; var hexToBase32 = (hexString) => { const bytes = hexString.match(/.{1,2}/g).map((byte) => parseInt(byte, 16)); const base32Alphabet = "qpzry9x8gf2tvdw0s3jn54khce6mua7l"; let base32String = ""; let num = BigInt("0x" + hexString); while (num > BigInt(0)) { const remainder = num % BigInt(32); num = num / BigInt(32); base32String = base32Alphabet[Number(remainder)] + base32String; } return base32String; }; export { aesDecrypt, aesEncrypt, base58ToHex, checkSign, createSign, genRandomString, hexToBase32, hexToBase58, hmac, hmacSha256, md5, sha1, sha512 }; //# sourceMappingURL=security.util.js.map