UNPKG

@joingo/sdk-security

Version:

SDK for JavaScript: Security Application Block!

47 lines (43 loc) 2.72 kB
/* ************************************************************************************************************************ *\ * SDK for JavaScript! * * * * COPYRIGHT © 2021 BEIJING JOINGO INFORMATION TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED. * * LICENSED UNDER THE MIT LICENSE. SEE LICENSE FILE IN THE PROJECT ROOT FOR FULL LICENSE INFORMATION. * * * * AUTHOR : WANG YUCAI * * E-MAIL ADDRESS: WANGYUCAI@JOINGO.VIP * * DATE TIME : 2021-12-29 13:49 * \* ************************************************************************************************************************ */ // CODEFILE: hash-algorithm.ts // FEATURE: 提供了哈希算法相关的方法。 // FILE-VERSION: v2021.12.29-build.1349 import { isNullOrEmpty } from "@joingo/sdk-core"; import CryptoJS from "crypto-js"; /** * 定义了哈希算法名称。 */ export type HashAlgorithmNames = ("MD5" | "SHA1" | "SHA224" | "SHA256" | "SHA384" | "SHA512" | "RIPEMD160"); /** * 计算哈希值。 * * @export * @param {string} s 明文字符串。 * @param {(HashAlgorithmNames | string)} [algName="SHA1"] 哈希算法名称。默认为 "SHA1"。 * @returns {string} */ export function computeHash(s: string, algName: HashAlgorithmNames | string = "SHA1"): string { if (isNullOrEmpty(s)) return ""; let buffer: CryptoJS.lib.WordArray = CryptoJS.enc.Utf8.parse(s); switch (algName) { case "MD5": buffer = CryptoJS.MD5(buffer); break; case "SHA224": buffer = CryptoJS.SHA224(buffer); break; case "SHA256": buffer = CryptoJS.SHA256(buffer); break; case "SHA384": buffer = CryptoJS.SHA384(buffer); break; case "SHA512": buffer = CryptoJS.SHA512(buffer); break; case "RIPEMD160": buffer = CryptoJS.RIPEMD160(buffer); break; default: buffer = CryptoJS.SHA1(buffer); break; } const hashStr: string = buffer.toString(CryptoJS.enc.Hex); console.debug(`[DEBUG]: 字符串 "${s}" 哈希字符串为 "${hashStr}"。详情参见:%o`, { raw: s, hashStr, hashData: buffer }); return hashStr; }