前端实现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(); // 返回加密后的字符串
}
相关推荐
gplitems1232 小时前
Consua WordPress Theme — Business Consulting Sites That Convert With Clarity
javascript
雾削木3 小时前
stm32解锁芯片
javascript·stm32·单片机·嵌入式硬件·gitee
2301_768350234 小时前
Vue第二期:组件及组件化和组件的生命周期
前端·javascript·vue.js
小周同学:4 小时前
Vue项目中将界面转换为PDF并导出的实现方案
javascript·vue.js·pdf
华洛5 小时前
公开一个AI产品的商业逻辑与设计方案——AI带来的涂色卡自由
前端·后端·产品
明远湖之鱼5 小时前
opentype.js 使用与文字渲染
前端·svg·字体
90后的晨仔6 小时前
Vue 3 组合式函数(Composables)全面解析:从原理到实战
前端·vue.js
今天头发还在吗6 小时前
【React】TimePicker进阶:解决开始时间可大于结束时间的业务场景与禁止自动排版
javascript·react.js·ant design
今天头发还在吗6 小时前
【React】动态SVG连接线实现:图片与按钮的可视化映射
前端·javascript·react.js·typescript·前端框架
小刘不知道叫啥6 小时前
React 源码揭秘 | suspense 和 unwind流程
前端·javascript·react.js