加密和解密函数的具体实现代码

简介: 加密和解密函数的具体实现代码

加密和解密函数的核心是基于成熟的加密算法(如AES)实现,结合crypto-js库可以快速实现安全的加解密逻辑。以下是可直接使用的具体实现代码:

加密解密工具函数(完整代码)

// utils/crypto.js
import CryptoJS from 'crypto-js';

// 注意:生产环境中密钥和IV应从后端动态获取,不要硬编码!
// 密钥(AES要求16/24/32字节,这里用16字节示例)
const SECRET_KEY = CryptoJS.enc.Utf8.parse('3f2e1d0c7b6a5948'); 
// 初始向量(IV,16字节,增强加密安全性)
const IV = CryptoJS.enc.Utf8.parse('0a1b2c3d4e5f6789'); 

/**
 * 加密函数
 * @param {any} data - 待加密的数据(对象、字符串等)
 * @returns {string} 加密后的Base64字符串
 */
export const encrypt = (data) => {
   
  if (!data) return '';
  try {
   
    // 统一将数据转为JSON字符串(支持对象类型)
    const dataStr = typeof data === 'string' ? data : JSON.stringify(data);
    // 使用AES-CBC模式加密,PKCS7填充
    const encrypted = CryptoJS.AES.encrypt(
      dataStr,
      SECRET_KEY,
      {
   
        iv: IV,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
      }
    );
    // 返回加密后的Base64字符串
    return encrypted.toString();
  } catch (error) {
   
    console.error('加密失败:', error);
    return '';
  }
};

/**
 * 解密函数
 * @param {string} encryptedStr - 加密后的字符串
 * @returns {any} 解密后的数据(还原为原始类型)
 */
export const decrypt = (encryptedStr) => {
   
  if (!encryptedStr) return null;
  try {
   
    // 解密操作
    const decrypted = CryptoJS.AES.decrypt(
      encryptedStr,
      SECRET_KEY,
      {
   
        iv: IV,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
      }
    );
    // 将解密结果转为UTF8字符串
    const decryptedStr = decrypted.toString(CryptoJS.enc.Utf8);
    // 尝试还原为JSON对象(如果原始数据是对象)
    try {
   
      return JSON.parse(decryptedStr);
    } catch {
   
      // 若不是对象则直接返回字符串
      return decryptedStr;
    }
  } catch (error) {
   
    console.error('解密失败:', error);
    return null;
  }
};

代码说明

  1. 核心依赖:使用crypto-js库的AES算法,这是前端常用的对称加密方案(加密解密使用同一密钥)。

  2. 关键参数

    • SECRET_KEY:加密密钥,必须是16/24/32字节(对应128/192/256位加密强度)。
    • IV:初始向量,16字节,用于避免相同明文加密后产生相同密文,增强安全性。
    • 模式:采用CBC模式(比ECB更安全,需配合IV使用)。
    • 填充:PKCS7填充,解决数据长度不是AES块大小(16字节)倍数的问题。
  3. 数据处理

    • 加密时:将输入数据(对象/字符串)转为JSON字符串,统一格式后加密。
    • 解密时:将解密结果尝试解析为JSON对象,还原原始数据类型(若原始数据是字符串则直接返回)。

安全注意事项

  1. 密钥(SECRET_KEY)和IV绝对不能硬编码在前端代码中,生产环境应通过后端接口动态获取(例如用户登录后返回临时密钥)。
  2. 密钥应定期轮换,降低泄露风险。
  3. 敏感数据(如token、用户信息)建议加密存储,普通数据可选择不加密以减少性能损耗。

通过上述函数,可以在Pinia插件中直接调用encrypt()decrypt(),实现状态的加密存储和解密读取。

相关文章
|
2月前
|
存储 数据安全/隐私保护
如何将加密和解密函数应用到Pinia状态中?
如何将加密和解密函数应用到Pinia状态中?
259 124
|
2月前
|
存储 JSON 安全
加密和解密函数是如何实现的?
加密和解密函数是如何实现的?
409 123
|
3月前
|
存储 关系型数据库 MySQL
MYSQL数据加密压缩函数应用实战指南。
总的来说,加密和压缩是维护MySQL数据库中数据安全性和效率的有效手段。使用时需权衡性能与安全,合理应用加密和压缩函数。在设计数据库架构时要考虑到加密字段的查询性能,因为加密可能使得一些索引失效。压缩数据能有效减少存储空间的占用,但在服务器负载较高时应避免实时压缩和解压,以免影响总体性能。
147 10
|
4月前
|
存储 缓存 安全
php项目源码加密之Zend Guard Loader加密的代码解密可能性很小-优雅草卓伊凡
php项目源码加密之Zend Guard Loader加密的代码解密可能性很小-优雅草卓伊凡
170 2
|
7月前
|
存储 JavaScript 前端开发
在NodeJS中使用npm包进行JS代码的混淆加密
总的来说,使用“javascript-obfuscator”包可以帮助我们在Node.js中轻松地混淆JavaScript代码。通过合理的配置,我们可以使混淆后的代码更难以理解,从而提高代码的保密性。
648 9
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
940 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
存储 安全 数据安全/隐私保护
安全升级!Python AES加密实战,为你的代码加上一层神秘保护罩
【9月更文挑战第12天】在软件开发中,数据安全至关重要。本文将深入探讨如何使用Python中的AES加密技术保护代码免受非法访问和篡改。AES(高级加密标准)因其高效性和灵活性,已成为全球最广泛使用的对称加密算法之一。通过实战演练,我们将展示如何利用pycryptodome库实现AES加密,包括生成密钥、初始化向量(IV)、加密和解密文本数据等步骤。此外,还将介绍密钥管理和IV随机性等安全注意事项。通过本文的学习,你将掌握使用AES加密保护敏感数据的方法,为代码增添坚实的安全屏障。
527 8
|
安全 Java Shell
"SpringBoot防窥秘籍大公开!ProGuard混淆+xjar加密,让你的代码穿上隐形斗篷,黑客也无奈!"
【8月更文挑战第11天】开发SpringBoot应用时,保护代码免遭反编译至关重要。本文介绍如何运用ProGuard和xjar强化安全性。ProGuard能混淆代码,去除未使用的部分,压缩字节码,使反编译困难。需配置ProGuard规则文件并处理jar包。xjar则进一步加密jar包内容,即使被解压也无法直接读取。结合使用这两种工具可显著提高代码安全性,有效保护商业机密及知识产权。
1464 3
|
存储 安全 数据安全/隐私保护
安全升级!Python AES加密实战,为你的代码加上一层神秘保护罩
【8月更文挑战第2天】数据安全至关重要,AES加密作为对称加密的标准之一,因其高效性与灵活性被广泛采用。本文通过实战演示Python中AES的应用,使用pycryptodome库进行安装及加密操作。示例代码展示了生成随机密钥与初始化向量(IV)、对数据进行加密及解密的过程。注意事项包括密钥管理和IV的随机性,以及加密模式的选择。掌握AES加密能有效保护敏感数据,确保信息安全无虞。
404 6