132 lines
3.8 KiB
JavaScript
132 lines
3.8 KiB
JavaScript
// 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
|