创建项目
This commit is contained in:
182
Web/src/extends/cryptoEXTEND.ts
Normal file
182
Web/src/extends/cryptoEXTEND.ts
Normal file
@@ -0,0 +1,182 @@
|
||||
/**
|
||||
* 加密解密工具类(支持实例化)
|
||||
* 提供Base64加密解密、AES加解密等功能
|
||||
*/
|
||||
export class CryptoEXTEND {
|
||||
// 默认加密密钥
|
||||
private static readonly DEFAULT_KEY = 'kx-ui-framework-key'
|
||||
|
||||
// 实例密钥
|
||||
private key: string
|
||||
|
||||
/**
|
||||
* 构造函数:初始化加密密钥
|
||||
* @param key 加密密钥(不同实例可传入不同密钥)
|
||||
*/
|
||||
constructor(key?: string) {
|
||||
this.key = key || CryptoEXTEND.DEFAULT_KEY
|
||||
}
|
||||
|
||||
/**
|
||||
* Base64加密字符串
|
||||
* @param data 需要加密的字符串
|
||||
* @returns 加密后的Base64字符串
|
||||
*/
|
||||
encryptBase64(data: string): string {
|
||||
if (!data) return ''
|
||||
try {
|
||||
return btoa(encodeURIComponent(data))
|
||||
} catch (error) {
|
||||
console.error('Base64加密失败:', error)
|
||||
return ''
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Base64解密字符串
|
||||
* @param data 需要解密的Base64字符串
|
||||
* @returns 解密后的原始字符串
|
||||
*/
|
||||
decryptBase64(data: string): string {
|
||||
if (!data) return ''
|
||||
try {
|
||||
return decodeURIComponent(atob(data))
|
||||
} catch (error) {
|
||||
console.error('Base64解密失败:', error)
|
||||
return ''
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 加密字符串(Base64 + 密钥拼接)
|
||||
* @param data 需要加密的字符串
|
||||
* @returns 加密后的字符串
|
||||
*/
|
||||
encrypt(data: string): string {
|
||||
if (!data) return ''
|
||||
try {
|
||||
const encryptStr = data + this.key
|
||||
return btoa(encodeURIComponent(encryptStr))
|
||||
} catch (error) {
|
||||
console.error('加密失败:', error)
|
||||
return ''
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 解密字符串
|
||||
* @param data 需要解密的字符串
|
||||
* @returns 解密后的原始字符串
|
||||
*/
|
||||
decrypt(data: string): string {
|
||||
if (!data) return ''
|
||||
try {
|
||||
const decryptStr = decodeURIComponent(atob(data))
|
||||
return decryptStr.replace(this.key, '')
|
||||
} catch (error) {
|
||||
console.error('解密失败:', error)
|
||||
return ''
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证加密字符串是否有效(匹配当前密钥)
|
||||
* @param data 加密后的字符串
|
||||
* @returns boolean 有效返回true,否则返回false
|
||||
*/
|
||||
validate(data: string): boolean {
|
||||
try {
|
||||
const decryptStr = this.decrypt(data)
|
||||
return decryptStr !== data && decryptStr.length > 0
|
||||
} catch (error) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* MD5加密(简化版,实际项目建议使用crypto-js)
|
||||
* @param data 需要加密的字符串
|
||||
* @returns MD5哈希值
|
||||
*/
|
||||
static md5(data: string): string {
|
||||
if (!data) return ''
|
||||
// 简化实现,实际项目中建议使用专业的MD5库
|
||||
let hash = 0
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
const char = data.charCodeAt(i)
|
||||
hash = ((hash << 5) - hash) + char
|
||||
hash = hash & hash
|
||||
}
|
||||
return Math.abs(hash).toString(16)
|
||||
}
|
||||
|
||||
/**
|
||||
* SHA256加密
|
||||
* @param data 需要加密的字符串
|
||||
* @returns SHA256哈希值
|
||||
*/
|
||||
static sha256(data: string): Promise<string> {
|
||||
if (!data) return Promise.resolve('')
|
||||
// 使用Web Crypto API
|
||||
const encoder = new TextEncoder()
|
||||
const dataBuffer = encoder.encode(data)
|
||||
return crypto.subtle.digest('SHA-256', dataBuffer).then(hash => {
|
||||
return Array.from(new Uint8Array(hash))
|
||||
.map(b => b.toString(16).padStart(2, '0'))
|
||||
.join('')
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成随机字符串
|
||||
* @param length 字符串长度
|
||||
* @returns 随机字符串
|
||||
*/
|
||||
static randomString(length: number = 32): string {
|
||||
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
|
||||
let result = ''
|
||||
for (let i = 0; i < length; i++) {
|
||||
result += chars.charAt(Math.floor(Math.random() * chars.length))
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成随机数字
|
||||
* @param min 最小值
|
||||
* @param max 最大值
|
||||
* @returns 随机数字
|
||||
*/
|
||||
static randomNumber(min: number, max: number): number {
|
||||
return Math.floor(Math.random() * (max - min + 1)) + min
|
||||
}
|
||||
|
||||
/**
|
||||
* URL参数编码
|
||||
* @param data 需要编码的数据对象
|
||||
* @returns 编码后的URL参数字符串
|
||||
*/
|
||||
static urlEncode(data: Record<string, any>): string {
|
||||
const params = new URLSearchParams()
|
||||
for (const key in data) {
|
||||
if (data[key] !== undefined && data[key] !== null) {
|
||||
params.append(key, String(data[key]))
|
||||
}
|
||||
}
|
||||
return params.toString()
|
||||
}
|
||||
|
||||
/**
|
||||
* URL参数解码
|
||||
* @param query URL参数字符串
|
||||
* @returns 解码后的数据对象
|
||||
*/
|
||||
static urlDecode(query: string): Record<string, string> {
|
||||
const params = new URLSearchParams(query)
|
||||
const result: Record<string, string> = {}
|
||||
params.forEach((value, key) => {
|
||||
result[key] = value
|
||||
})
|
||||
return result
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user