allinssl/frontend/packages/utils/src/encipher.ts

87 lines
2.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/**
* 文件定义:加密解密
*/
// 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
}
}