@joingo/sdk-security
Version:
SDK for JavaScript: Security Application Block!
47 lines (43 loc) • 2.72 kB
text/typescript
/* ************************************************************************************************************************ *\
* 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;
}