Adinnet-Web Adinnet-Web
首页
  • 技术沉淀

    • 技术沉淀
  • 前端文章

    • JavaScript
  • 前端笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 实用技巧
收藏
  • 分类
  • 标签
  • 归档
首页
  • 技术沉淀

    • 技术沉淀
  • 前端文章

    • JavaScript
  • 前端笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 实用技巧
收藏
  • 分类
  • 标签
  • 归档
  • JavaScript文章

  • 学习笔记

  • 技术沉淀

    • CSS矩形绘制
    • 仿微信通讯录
    • 微信小程序订阅消息
    • 保存海报
    • 微信小程序页面弹框
    • 微信小程序在指定距离范围内签到
    • h5嵌套u3d,使用iframe进行交互
    • 前端主导文件处理方法
    • 图片压缩方法封装
    • 金额大写函数
    • 前端主导的小程序一键导航功能
    • uniapp富文本组件(只支持H5)
    • uniapp二次确认弹框组件(依赖于uview)
    • 无缝滚动插件(vue3)
    • H5与unity通信(只针对unity嵌套H5)
    • 辅助触控
    • 关系图
    • h5&svg点赞动效
    • iframe高精地图文件预览
    • 自适应横向瀑布流布局
    • 考试功能
    • 仿小说翻页
    • 富文本
    • h5唤醒App
    • vue3 Count-to数字翻动
    • 小程序图片转base64
    • 第三方应用跳转微信小程序
    • 圆角TabBar
    • 大屏Header
    • Echarts中国地图
    • 使用computed拦截v-model
    • 消息订阅与发布
    • Html相对路径页面跳转
    • Vite打包本地访问
    • H5主题切换
    • 移动端列表分页
    • 每次进入页面都触发的功能(v3)
    • 智能导诊
    • js中几个优雅的运算符使用技巧
    • 其他CSS伪元素
    • 微信浏览器保存canvas海报
    • uniappH5手动拖拽缩放自定义绘制海报
    • uniapp小程序盒子拖拽排序
    • 微信小程序地图的使用
    • css静态漏斗绘制
    • 微信小程序图片流处理
    • ios时间问题
    • 文字围绕效果
    • 表格树动态计算
    • React中useEffect用法
    • React Hooks 陷阱
    • Naive UI修改默认样式
    • vue 根据div id 滚动到指定view到可视视图中
    • js将[1,2,3]排列组合成[1.12.123]
    • 移动端如何加载vite导出dist包
    • TS探索接口、泛型和自定义类型
    • WebSocket中加入Token
    • 幂方程指数衰减
    • pageSpy
    • 表格多条件搜索
    • axios get 请求 url 转码 空格转成+,导致请求失败
    • NaiveUI使用Message组件遇到的问题记录
    • 小程序多盒子拖拽排序
    • 对象快速筛key方法
    • 倒计时
    • nuxt3中的useAsyncData使用详解
    • nuxt3文件式路由
    • 播放amr格式音频
    • echarts瀑布图
    • vue中使用vueuse进行文件导出
    • 分享一个数据整理方法
    • naiveui表格shift多选
    • 数组递归转tree
    • 自定义指令图片懒加载
    • 将数组里面的对象转换成我们需要的键值对
    • 亚马逊云s3上传
    • 上拉加载更多封装
    • JS设计模式总结笔记
    • 适配移动端页面顶部安全区域
    • 【CryptoJS】使用介绍
      • 微信小程序富文本图片点击放大
      • 微信小程序省市区级联选择
      • uniapp拖动排序插件
      • element ui 的树形结构懒加载,局部更新
      • 表单搜索过滤空值
      • 判断设备类型
      • tsconfig配置打包问题
      • vant-uploader上传组件添加长按保存图片
      • BroadcastChannel跨页面通信
      • pnpm安装问题
      • echart阶梯图形绘制
      • js根据对象拼接参数
      • 集成免密登录
      • 输入框输入数字限制
      • js控制全局css变量
      • 流程图
      • 修改npm包
      • tsx在vue3中的应用
      • 109video播放视频流
      • echart默认展示某个点的tooltip
      • 大屏适配几种方案
      • 表单低代码自定义列表页
      • 表单低代码列表页配置端代码
      • 低代码平台使用的一些好用的js方法
      • vue3cookie的使用
      • 原生js下载文件
      • stompjs 创建socket,断线重连机制
      • iframe作为内嵌网页cookie设置
      • 前端对文件内容解析生成特定算法哈希值方法
      • vue3中前端自定义命名文件名称下载文件的方法
      • 前端项目中权限判断的方法配合路由守卫使用
      • 原生table:表格table中thead固定,tbody超出高度出现滚动条
      • vue中使用原生的方法
      • vue3中amchart的初步使用
      • base64图片加水印
      • 手写签名
      • base64转doc文件
    • 前端
    • 技术沉淀
    商会林
    2024-09-09
    目录

    【CryptoJS】使用介绍

    # 介绍

    CryptoJS是一个JavaScript的加解密的工具包。它支持多种的算法:MD5、SHA1、SHA2、SHA3、RIPEMD-160 哈希散列,进行 AES、DES、Rabbit、RC4、Triple DES 加解密。

    # 散列算法

    MD5是一种广泛使用的散列函数。它被用于各种安全应用,也通常用于校验文件的完整性。但MD5不耐碰撞攻击,因此不适用于SSL证书或数字签名。

    var hash = CryptoJS.MD5("Message");
    
    1

    # SHA-1

    SHA 散列函数由美国国家安全局 (NSA) 设计。SHA-1 是现有 SHA 散列函数中最成熟的,它用于各种安全应用程序和协议。但随着新攻击的发现或改进,SHA-1 的抗攻击能力一直在减弱。

    var hash = CryptoJS.SHA1("Message");
    
    1

    # SHA-2

    SHA-224、SHA-256、SHA-384,和SHA-512合称为SHA-2。 SHA-256是SHA-2集合中的四个变体之一。虽然它提供了更好的安全性,但是它的应用不如SHA-1广泛。

    var hash = CryptoJS.SHA256("Message");
    
    1

    SHA-512在很大程度上与SHA-256相同,但在64位计算机上SHA-512比SHA-256更快(因为它们在内部使用64位算术);在8位,16位和32位计算机上,SHA-256比SHA-512更快。

    var hash = CryptoJS.SHA512("Message");
    
    1

    CryptoJS还支持SHA-224和SHA-384,这两个版本大致相同,分别是SHA-256和SHA-512的删减版本。

    # SHA-3

    SHA-3是第三代安全散列算法(Secure Hash Algorithm 3)

    var hash = CryptoJS.SHA3("Message");
    
    1

    SHA-3可以配置输出散列长度为224,256,384或512位,默认为512位。

    var hash = CryptoJS.SHA3("Message", { outputLength: 512 });
    var hash = CryptoJS.SHA3("Message", { outputLength: 384 });
    var hash = CryptoJS.SHA3("Message", { outputLength: 256 });
    var hash = CryptoJS.SHA3("Message", { outputLength: 224 });
    
    1
    2
    3
    4

    # RIPEMD-160

    var hash = CryptoJS.RIPEMD160("Message");
    
    1

    # 散列输入

    散列算法接受输入字符串或WordArray实例。WordArray对象表示一个32位“单词数组”。当你传入一个字符串时,它会自动转换为编码为UTF-8的WordArray。

    # 散列输出

    返回的散列不是字符串,它是一个WordArray对象。当您在字符串上下文中使用WordArray对象时,它会自动转换为十六进制字符串。

    var hash = CryptoJS.SHA256("Message");
     
    typeof hash
    > "object";
     
    hash
    > "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91";
    
    1
    2
    3
    4
    5
    6
    7

    使用toString方法并传入编码格式,可以将WordArray对象转换为其他编码格式

    var hash = CryptoJS.SHA256("Message")
     
    hash.toString(CryptoJS.enc.Base64)
    > "L3dmip37+NWEi57rSnFFypTG7ZI25Kdz9tyvpRMrL5E=";
     
    hash.toString(CryptoJS.enc.Hex)
    > "2f77668a9dfbf8d5848b9eeb4a7145ca94c6ed9236e4a773f6dcafa5132b2f91";
    
    1
    2
    3
    4
    5
    6
    7

    # 渐进式散列

    
    var sha256 = CryptoJS.algo.SHA256.create();
    sha256.update("Message Part 1");
    sha256.update("Message Part 2");
    sha256.update("Message Part 3");
     
    var hash = sha256.finalize();
    
    1
    2
    3
    4
    5
    6
    7

    # HMAC

    HMAC是一种使用加密散列函数进行消息认证的机制,可以与任何迭代密码散列函数结合使用。

    
    var hash = CryptoJS.HmacMD5("Message", "Secret Passphrase");
    var hash = CryptoJS.HmacSHA1("Message", "Secret Passphrase");
    var hash = CryptoJS.HmacSHA256("Message", "Secret Passphrase");
    var hash = CryptoJS.HmacSHA512("Message", "Secret Passphrase");
    
    1
    2
    3
    4
    5

    # 渐进式HMAC散列

    
    var hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, "Secret Passphrase");
    hmac.update("Message Part 1");
    hmac.update("Message Part 2");
    hmac.update("Message Part 3");
     
    var hash = hmac.finalize();
    
    1
    2
    3
    4
    5
    6
    7

    # PBKDF2

    PBKDF2是一个用来对用户口令(password)进行加密的函数。在密码学的许多应用中,用户安全性最终取决于用户口令,由于用户口令通常不能直接用作密钥,因此需要进行一些处理。

    它的基本原理是通过一个伪随机函数(例如HMAC函数),把明文和一个盐值作为输入参数,,生成一个散列值,然后将这个散列值作为一个加密key,应用到后续的加密过程中,以此类推,将这个过程重复很多次,从而增加了密码破解的难度,这个过程也被称为是密码加强。如果重复的次数足够大,破解的成本就会变得很高。

    • Salt 表示盐值,一个随机数
    • iterations 操作次数
    
    var salt = CryptoJS.lib.WordArray.random(128 / 8);
    var key128Bits = CryptoJS.PBKDF2("Secret Passphrase", salt, {
      keySize: 128 / 32
    });
    var key256Bits = CryptoJS.PBKDF2("Secret Passphrase", salt, {
      keySize: 256 / 32
    });
    var key512Bits = CryptoJS.PBKDF2("Secret Passphrase", salt, {
      keySize: 512 / 32
    });
    var key512Bits1000Iterations = CryptoJS.PBKDF2("Secret Passphrase", salt, {
      keySize: 512 / 32,
      iterations: 1000
    });
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    # 加密

    # 加密算法

    加密函数的参数是:(明文字符串, 密钥字符串,可选参数对象),返回密文字符串。 加密函数是:Cryptojs.AES.encrypt,Cryptojs.DES.encrypt``,Cryptojs.Rabbit.encrypt,Cryptojs.RC4.encrypt,Cryptojs.TripleDES.encrypt

    解密函数的参数是:(密文字符串, 密钥字符串,可选参数对象),返回的结果必须用.toString(CryptoJS.enc.Utf8)转为明文。 解密函数是:CryptoJS.AES.decrypt,CryptoJS.DES.decrypt,CryptoJS.Rabbit.decrypt,CryptoJS.RC4.decrypt,CryptoJS.TripleDES.decrypt

    其中可选参数对象常用属性:

    • mode:加密模式 【CBC ECB CFB OFB CTRGladman(CTR)】
    • paddig:填充方式 【 NoPadding ZeroPadding Pkcs7(Pkcs5) Iso10126 Iso97971 AnsiX923】
    • vi: 偏移向量
    • formatter:自定义格式

    # AES

    AES密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。

    var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase");
     
    var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase");
    
    1
    2
    3

    CryptoJS支持AES-128、AES-192和AES-256。密钥的长度决定了AES加密的轮数。

    # DES,三重DES

    DES是以前比较重要的加密算法,但由于密钥长度太短,安全性不够。

    var encrypted = CryptoJS.DES.encrypt("Message", "Secret Passphrase");
     
    var decrypted = CryptoJS.DES.decrypt(encrypted, "Secret Passphrase");
    
    1
    2
    3

    三重DES是为了增加DES的强度,将DES重复3次所得到的一种密码算法,具有足够的安全性。

    var encrypted = CryptoJS.TripleDES.encrypt("Message", "Secret Passphrase");
     
    var decrypted = CryptoJS.TripleDES.decrypt(encrypted, "Secret Passphrase");
    
    1
    2
    3

    # Rabbit

    Rabbit 是一种高速流密码,于 2003 年在 FSE 研讨会上首次提出。 Rabbit 使用一个 128 位密钥和一个 64 位初始化向量。 该加密算法的核心组件是一个位流生成器,该流生成器每次迭代都会加密 128 个消息位。

    var encrypted = CryptoJS.Rabbit.encrypt("Message", "Secret Passphrase");
     
    var decrypted = CryptoJS.Rabbit.decrypt(encrypted, "Secret Passphrase");
    
    1
    2
    3

    # RC4, RC4Drop

    RC4算法是Ron Rivest为RSA公司在1987年设计的一种流密码,作为RSA的商业机密直到1994年才被匿名公布于Internet。 RC4被用于为网络浏览器和服务器间通信而制定的SSL/TLS(安全套接字协议/传输层安全协议)标准中,以及作为IEEE 801.11无线局域网标准一部分的WEP(Wired Equivalent Privacy)协议和新的WiFi受保护访问协议(WAP)中。从这些应用来看,RC4构成了当今网络通信的非常重要的部分,因此这个算法非常重要。

    var encrypted = CryptoJS.RC4.encrypt("Message", "Secret Passphrase");
     
    var decrypted = CryptoJS.RC4.decrypt(encrypted, "Secret Passphrase");
    
    1
    2
    3

    后来研究者发现,密钥流初始的若干字节有偏移问题,泄露了密钥信息,被很多用户弃用。当然,我们可以通过丢弃密钥流的初始若干字节来防御这种攻击,这种改进的算法也被称为RC4-drop。 RC4-drop可以用drop属性设置丢弃字节值。

    var encrypted = CryptoJS.RC4Drop.encrypt("Message", "Secret Passphrase");
     
    var encrypted = CryptoJS.RC4Drop.encrypt("Message", "Secret Passphrase", {
      drop: 3072 / 4
    });
     
    var decrypted = CryptoJS.RC4Drop.decrypt(encrypted, "Secret Passphrase", {
      drop: 3072 / 4
    });
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    # 设置密钥(key)和偏移量(iv)

    var key = CryptoJS.enc.Hex.parse("000102030405060708090a0b0c0d0e0f");
     
    var iv = CryptoJS.enc.Hex.parse("101112131415161718191a1b1c1d1e1f");
     
    var encrypted = CryptoJS.AES.encrypt("Message", key, { iv: iv });
    
    1
    2
    3
    4
    5

    # 加密模式和填充方式

    
    var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase", {
      mode: CryptoJS.mode.CFB,
      padding: CryptoJS.pad.AnsiX923
    });
    
    1
    2
    3
    4
    5

    CryptoJS支持以下加密模式:

    • CBC (the default)

    • CFB

    • CTR

    • OFB

    • ECB CryptoJS支持以下填充方式:

    • Pkcs7 (the default)

    • Iso97971

    • AnsiX923

    • Iso10126

    • ZeroPadding

    • NoPadding

    # 加密输入

    对于明文消息,加密算法接受输入字符串或CryptoJS.lib.WordArray实例。

    对于密钥key,当您输入一个字符串时,它将用于生成密钥和IV。您可以输入实际密钥的WordArray对象和实际的IV。

    对于密文,密码算法接受输入字符串或CryptoJS.lib.CipherParams的实例。CipherParams对象表示一组参数,如IV、salt和原始密文本身。当您输入字符串时,它会根据可配置的格式策略自动转换为CipherParams对象。

    # 加密输出

    解密后得到的明文是一个WordArray对象。详见散列的输出。

    加密后得到的密文不是字符串,它是一个CipherParams对象。通过CipherParams对象,您可以拿到加密期间使用的所有参数。当您在字符串上下文中使用CipherParams对象时,它会根据格式策略自动转换为字符串。默认是openssl兼容的格式。

    var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase");
     
    encrypted.key
    > "74eb593087a982e2a6f5dded54ecd96d1fd0f3d44a58728cdcd40c55227522223 ";
     
    encrypted.iv
    > "7781157e2629b094f0e3dd48c4d786115";
     
    encrypted.salt
    > "7a25f9132ec6a8b34";
     
    encrypted.ciphertext
    > "73e54154a15d1beeb509d9e12f1e462a0";
     
    encrypted
    > "U2FsdGVkX1+iX5Ey7GqLND5UFUoV0b7rUJ2eEvHkYqA=";
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    您可以定义自己的格式,以便与其他加密实现兼容。format有两个对象方法stringify和parse,在CipherParams对象和密文字符串之间进行转换。 下面是编写JSON格式化的方法:

    var JsonFormatter = {
      stringify: function(cipherParams) {
        // 创建ciphertext对象
        var jsonObj = { ct: cipherParams.ciphertext.toString(CryptoJS.enc.Base64) };
     
        //可选添加 iv 和 salt
        if (cipherParams.iv) {
          jsonObj.iv = cipherParams.iv.toString();
        }
     
        if (cipherParams.salt) {
          jsonObj.s = cipherParams.salt.toString();
        }
     
        // 转换成json字符串
        return JSON.stringify(jsonObj);
      },
      parse: function(jsonStr) {
        // 转换成json格式
        var jsonObj = JSON.parse(jsonStr);
     
        // extract ciphertext from json object, and create cipher params object
        var cipherParams = CryptoJS.lib.CipherParams.create({
          ciphertext: CryptoJS.enc.Base64.parse(jsonObj.ct)
        });
     
        // 可选提取 iv 和 salt
     
        if (jsonObj.iv) {
          cipherParams.iv = CryptoJS.enc.Hex.parse(jsonObj.iv);
        }
     
        if (jsonObj.s) {
          cipherParams.salt = CryptoJS.enc.Hex.parse(jsonObj.s);
        }
     
        return cipherParams;
      }
    };
     
    var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase", {
      format: JsonFormatter
    });
     
    encrypted
    > {
        ct: "tZ4MsEnfbcDOwqau68aOrQ==",
        iv: "8a8c8fd8fe33743d3638737ea4a00698",
        s: "ba06373c8f57179c"
      };
     
    var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase", {
      format: JsonFormatter
    });
     
    decrypted.toString(CryptoJS.enc.Utf8)
    > "Message";
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57

    # 渐进式加密

    var key = CryptoJS.enc.Hex.parse("000102030405060708090a0b0c0d0e0f");
    var iv = CryptoJS.enc.Hex.parse("101112131415161718191a1b1c1d1e1f");
     
    // encrypt加密
    var aesEncryptor = CryptoJS.algo.AES.createEncryptor(key, { iv: iv });
     
    var ciphertextPart1 = aesEncryptor.process("Message Part 1");
    var ciphertextPart2 = aesEncryptor.process("Message Part 2");
    var ciphertextPart3 = aesEncryptor.process("Message Part 3");
    var ciphertextPart4 = aesEncryptor.finalize();
     
    // decrypt解密
    var aesDecryptor = CryptoJS.algo.AES.createDecryptor(key, { iv: iv });
     
    var plaintextPart1 = aesDecryptor.process(ciphertextPart1);
    var plaintextPart2 = aesDecryptor.process(ciphertextPart2);
    var plaintextPart3 = aesDecryptor.process(ciphertextPart3);
    var plaintextPart4 = aesDecryptor.process(ciphertextPart4);
    var plaintextPart5 = aesDecryptor.finalize();
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

    # 可行性操作

    使用OpenSSL加密拿到openSSLEncrypted:

    openssl enc -aes-256-cbc -in infile -out outfile -pass pass:"Secret Passphrase" -e -base64
    
    1

    使用CryptoJS解密:

    var decrypted = CryptoJS.AES.decrypt(openSSLEncrypted, "Secret Passphrase");
    
    1

    # 编码器

    CryptoJS可以将Base64、Latin1或Hex等编码格式转换为WordArray对象,反之亦然。

    // Base64字符串 > WordArray对象
    var words = CryptoJS.enc.Base64.parse("SGVsbG8sIFdvcmxkIQ==");
     
    ​// WordArray对象 > Base64字符串
    var base64 = CryptoJS.enc.Base64.stringify(words);
     
    ​// Latin1字符串 > WordArray对象
    var words = CryptoJS.enc.Latin1.parse("Hello, World!");
     
    // WordArray对象 > Latin1
    var latin1 = CryptoJS.enc.Latin1.stringify(words);
     
    ​// 16进制 > WordArray对象
    var words = CryptoJS.enc.Hex.parse("48656c6c6f2c20576f726c6421");
     
    ​​// WordArray对象 > 16进制
    var hex = CryptoJS.enc.Hex.stringify(words);
     
    ​​// utf8 > WordArray对象
    var words = CryptoJS.enc.Utf8.parse("𔭢");
     
    ​// WordArray对象 > utf8
    var utf8 = CryptoJS.enc.Utf8.stringify(words);
     
    ​​​// utf16 > WordArray对象
    var words = CryptoJS.enc.Utf16.parse("Hello, World!");
     
    ​​// WordArray对象 > utf16
    var utf16 = CryptoJS.enc.Utf16.stringify(words);
     
    ​​// utf16le > WordArray对象​
    var words = CryptoJS.enc.Utf16LE.parse("Hello, World!");
     
    ​​// WordArray对象 > utf16le
    var utf16 = CryptoJS.enc.Utf16LE.stringify(words);
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35

    # 使用方法

    # 1、安装

    npm install crypto-js --save-dev
    yarn add crypto-js --dev
    // 或者下载js文件
    https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js
    
    1
    2
    3
    4

    # 2、在node中使用

    ES6方式:

    import sha256 from 'crypto-js/sha256';
    import hmacSHA512 from 'crypto-js/hmac-sha512';
    import Base64 from 'crypto-js/enc-base64';
    const message, nonce, path, privateKey; 
    const hashDigest = sha256(nonce + message);
    const hmacDigest = Base64.stringify(hmacSHA512(path + hashDigest, privateKey));
    
    1
    2
    3
    4
    5
    6

    非ES6方式:

    var AES = require("crypto-js/aes");
    var SHA256 = require("crypto-js/sha256");
    ...
    console.log(SHA256("Message"));
    
    1
    2
    3
    4

    可以引入整个CryptoJS,这样可以使用所有加解密的方法

    var CryptoJS = require("crypto-js");
    console.log(CryptoJS.HmacSHA1("Message", "Key"));
    
    1
    2

    # 3、在浏览器客户端使用

    RequireJS方式: 按需导入CryptoJS子模块方法

    require.config({
        packages: [
            {
                name: 'crypto-js',
                location: 'path-to/bower_components/crypto-js',
                main: 'index'
            }
        ]
    });
    require(["crypto-js/aes", "crypto-js/sha256"], function (AES, SHA256) {
        console.log(SHA256("Message"));
    });
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    或者导入整个CryptoJS模块,这样可以使用所有加解密的方法

    require.config({
        paths: {
            'crypto-js': 'path-to/bower_components/crypto-js/crypto-js'
        }
    });
    require(["crypto-js"], function (CryptoJS) {
        console.log(CryptoJS.HmacSHA1("Message", "Key"));
    });
    
    1
    2
    3
    4
    5
    6
    7
    8

    非RequireJS方式:

    <script type="text/javascript" src="path-to/bower_components/crypto-js/crypto-js.js"></script>
    <script type="text/javascript">
        var encrypted = CryptoJS.AES(...);
        var encrypted = CryptoJS.SHA256(...);
    </script>
    
    1
    2
    3
    4
    5

    # 4、AES加密例子

    纯文本加密

    var CryptoJS = require("crypto-js");
    // Encrypt
    var ciphertext = CryptoJS.AES.encrypt('my message', 'secret key 123').toString();
    // Decrypt
    var bytes  = CryptoJS.AES.decrypt(ciphertext, 'secret key 123');
    var originalText = bytes.toString(CryptoJS.enc.Utf8);
    console.log(originalText); // 输出'my message'
    
    1
    2
    3
    4
    5
    6
    7

    对象加密

    var CryptoJS = require("crypto-js");
    var data = [{id: 1}, {id: 2}]
    // Encrypt
    var ciphertext = CryptoJS.AES.encrypt(JSON.stringify(data), 'secret key 123').toString();
    // Decrypt
    var bytes  = CryptoJS.AES.decrypt(ciphertext, 'secret key 123');
    var decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
    console.log(decryptedData); //输出 [{id: 1}, {id: 2}]
    
    1
    2
    3
    4
    5
    6
    7
    8
    上次更新: 2024/09/09, 15:16:31
    适配移动端页面顶部安全区域
    微信小程序富文本图片点击放大

    ← 适配移动端页面顶部安全区域 微信小程序富文本图片点击放大→

    最近更新
    01
    base64转doc文件
    01-03
    02
    手写签名
    01-03
    03
    base64图片加水印
    01-03
    更多文章>
    Theme by Vdoing | Copyright © 2023-2025 Adinnet
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式