Files
AllinSSL/frontend/packages/utils/src/encipher.ts
chudong f1a75afaba 【同步】前端项目源码
【修复】工作流兼容问题
2025-05-10 11:53:11 +08:00

87 lines
2.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 文件定义:加密解密
*/
// import JSEncrypt from 'jsencrypt'
/* -------------- 1、加密解密 -------------- */
/**
* 生成2048位RSA密钥对
* @returns {{ publicKey: string, privateKey: string }} 包含公钥和私钥的对象
*/
export const generateKeyPair = async () => {
const { JSEncrypt } = await import('jsencrypt')
const encrypt = new JSEncrypt({ default_key_size: '2048' })
encrypt.getKey()
return {
publicKey: encrypt.getPublicKey() as string,
privateKey: encrypt.getPrivateKey() as string,
}
}
/**
* RSA加密
* @param {string} str - 需要加密的字符串
* @param {string} publicKey - 公钥
* @returns {string} 加密后的字符串
*/
export const rsaEncrypt = async (str: string, publicKey: string): Promise<string> => {
const { JSEncrypt } = await import('jsencrypt')
// 基础验证
if (!str || !publicKey || publicKey.length < 10) return str
// 检查字符串长度2048位RSA密钥最大可加密245字节
const byteLength = new TextEncoder().encode(str).length
if (byteLength > 245) {
console.error('RSA加密失败: 数据长度超过245字节限制')
return str
}
try {
const encrypt = new JSEncrypt()
encrypt.setPublicKey(publicKey)
const encrypted = encrypt.encrypt(str)
// 确保加密结果有效
if (!encrypted) {
console.error('RSA加密失败')
return str
}
return encrypted
} catch (error) {
console.error('RSA加密出错:', error)
return str
}
}
/**
* RSA解密
* @param {string} str - 需要解密的字符串
* @param {string} privateKey - 私钥
* @returns {string} 解密后的字符串
*/
export const rsaDecrypt = async (str: string, privateKey: string): Promise<string> => {
const { JSEncrypt } = await import('jsencrypt')
// 基础验证
if (!str || !privateKey || privateKey.length < 10) return str
try {
const decrypt = new JSEncrypt()
decrypt.setPrivateKey(privateKey)
const decrypted = decrypt.decrypt(str)
// 确保解密结果有效
if (!decrypted) {
console.error('RSA解密失败')
return str
}
return decrypted
} catch (error) {
console.error('RSA解密出错:', error)
return str
}
}