前端实现uuid及crypto加密

本文介绍了前端实现生成uuid 和使用crypto-js对密码进行加密的做法,需要的小伙伴可以自取哈~

1. 手动实现uuid

    1. 生成带有前缀的UUID字符串
    1. 存储UUID的每个字符的数组
    1. 用于生成十六进制字符的字母表
    1. 循环36次,生成UUID的每个字符
    1. 随机选择一个索引作为当前字符的值
    1. 将选定的字符添加到数组中
    1. 设置UUID的特定位置的字符
    1. 在特定位置添加连字符
    1. 将字符数组连接成最终的UUID字符串
    1. 返回带有前缀的UUID字符串
ts 复制代码
// 生成带有前缀的UUID字符串
export const generateUuid = (): string => {
  // 存储UUID的每个字符的数组
  const s: string[] = [];
  
  // 用于生成十六进制字符的字母表
  const hexDigits: string = `0123456789abcdef`;
  
  // 循环36次,生成UUID的每个字符
  for (let i: number = 0; i < 36; ++i) {
    // 随机选择一个索引作为当前字符的值
    const start: number = Math.floor(Math.random() * 0x10);
    
    // 将选定的字符添加到数组中
    s[i] = hexDigits.slice(start, start + 1);
  }
  
  // 设置UUID的特定位置的字符
  s[14] = `4`;
  
  const start = (Number(s[19]) & 0x3) | 0x8;
  s[19] = hexDigits.slice(start, start + 1);
  
  // 在特定位置添加连字符
  s[8] = s[13] = s[18] = s[23] = `-`;
  
  // 将字符数组连接成最终的UUID字符串
  const uuid: string = s.join(``);
  
  // 返回带有前缀的UUID字符串
  return `supcon-${uuid}`;
};

2. 使用crypto-js加密

  • 生成密钥
  • 初始化向量
  • 将加密内容转成字节数组
  • 使用CBC模式加密
  • 使用Pkcs7方式填充
  • 返回加密之后的字符串
ts 复制代码
import CryptoJS from "crypto-js"; // @4.1.2

/**
 * 对内容进行加密处理
 * @param {any} content - 要加密的内容
 * @returns {string} - 加密后的字符串
 */
function encryptContent(content:any): string {
  let encryptedContent = content ?? ''; // 如果 content 为 null 或 undefined,则将其置为空字符串

  const secretKey = CryptoJS.enc.Utf8.parse("6e3d84fa5adb"); // 密钥
  const initializationVector = CryptoJS.enc.Utf8.parse("742cd20a079cd"); // 初始化向量
  const byteArray = CryptoJS.enc.Utf8.parse(encryptedContent); // 将要加密的内容转换为字节数组
  const encrypted = CryptoJS.AES.encrypt(byteArray, secretKey, {
    iv: initializationVector, // 设置初始化向量
    mode: CryptoJS.mode.CBC, // 使用 CBC 模式进行加密
    padding: CryptoJS.pad.Pkcs7, // 使用 Pkcs7 填充方式
  });

  return encrypted.toString(); // 返回加密后的字符串
}
相关推荐
IT_陈寒11 分钟前
Vue组件复用率提升300%?这5个高阶技巧让你的代码焕然一新!
前端·人工智能·后端
We་ct26 分钟前
LeetCode 79. 单词搜索:DFS回溯解法详解
前端·算法·leetcode·typescript·深度优先·个人开发·回溯
ujainu28 分钟前
Electron 实战:将用户输入保存到本地文件 —— 基于 `fs.writeFileSync` 与 IPC 的安全写入方案
javascript·安全·electron
小奶包他干奶奶43 分钟前
将svg对象化,并动态修改svg图标的颜色、尺寸等
前端·html
Lee川1 小时前
React 快速入门:Vue 开发者指南
前端·vue.js·react.js
进击的尘埃1 小时前
基于 LangChain.js 的前端 Agent 工作流编排:Tool 注册、思维链可视化与多步推理的实时 DAG 渲染
javascript
用户6158139695161 小时前
Elpis: 基于vue3+webpack5+nodejs搭建一个完整项目
前端
90后的晨仔1 小时前
S C:\WINDOWS\system32> pnpm i -g openclaw@latest pnpm : 无法加载文件 C:\xx\A
前端
颜酱2 小时前
最小生成树(MST)核心原理 + Kruskal & Prim 算法
javascript·后端·算法
蜡台2 小时前
Node 版本管理器NVM 安装配置和使用
前端·javascript·vue.js·node·nvm