mirror of
https://gitee.com/mirrors/AllinSSL.git
synced 2026-03-12 01:30:09 +08:00
【同步】前端项目源码
【修复】工作流兼容问题
This commit is contained in:
86
frontend/packages/utils/src/encipher.ts
Normal file
86
frontend/packages/utils/src/encipher.ts
Normal file
@@ -0,0 +1,86 @@
|
||||
/**
|
||||
* 文件定义:加密解密
|
||||
*/
|
||||
|
||||
// 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user