前端crypto-js, 文件加密,判断相同文件、图片(MD5,SHA256)

前情提要

在这里插入图片描述
大家好,今天我们来接触一个库crypto-js
在这里插入图片描述
没错,上面是有道翻译的截图,为了我们得到的信息更权威,这个库是用来加密的,但介绍是说,已经停止维护,但并不影响我们在前端项目中的使用,所以学学也没有坏处


应用场景

判断图片是否相同:这个是我最近的需求,借此机会我顺便学习了一些关于文件一些知识点,下面分享给大家,学习之前我们最好先要知道的一些概念.
什么是FileReader

MD5(Message-Digest Algorithm 5,消息摘要算法第5版)是一种被广泛使用的密码哈希函数,它可以产生出一个128位(16字节)的哈希值,通常表示为32个十六进制数字。MD5的设计是为了让不同的输入数据产生不同的哈希值,并且理论上无法从哈希值反向推导出原始数据。
然而,值得注意的是,MD5算法在密码学应用中已经被认为是不安全的,因为它存在碰撞(collision)的弱点。

SHA-256(Secure Hash Algorithm 256-bit)是一种密码学哈希函数,属于SHA-2(安全散列算法2系列)哈希函数家族的一部分。SHA-256算法可以将任意长度的数据块计算出一个固定长度的输出值,该输出值通常是256位(32字节)。
总的来说,SHA-256是一种安全、可靠且广泛应用的哈希算法,它提供了一种高效的方法来验证数据的完整性和一致性。如需更多关于SHA-256的信息,建议查阅密码学相关书籍或咨询该领域的专家。

是的这三个知识点是我们判断相同图片所需要清楚的概念,我们要做的可以分为三个步骤:

  1. 控件获取文件信息
  2. fileReader读取文件,转成文件buffer
  3. crypto算法,计算出固定长度的输入值,进行判断

实战解析

<script setup lang="ts">
import {
    ref } from 'vue'
import CryptoJS from 'crypto-js' //4.2.0

defineProps<{
      msg: string }>()

const count = ref(0
  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
引用[1]中提到了使用crypto-js库进行加密的方法。具体来说,可以使用AES加密算法对数据进行加密。在加密过程中,需要提供一个AES密钥(AESKey)和待加密的数据(value)。加密的过程包括以下几个步骤: 1. 将AES密钥转换为UTF-8编码的格式。 2. 根据AES密钥的前16位生成一个偏移量(iv)。 3. 将待加密的数据转换为UTF-8编码的格式。 4. 使用AES算法和指定的加密模式(ECB)、填充方式(Pkcs7)对数据进行加密。 5. 将加密后的数据转换为Base64字符串并返回。 具体的加密方法如下: ```javascript const encryption = (value: string, AESKey: string) => { let key = CryptoJS.enc.Utf8.parse(AESKey); let iv = CryptoJS.enc.Utf8.parse(AESKey.substr(0, 16)); let srcs = CryptoJS.enc.Utf8.parse(value); let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7, }); return CryptoJS.enc.Base64.stringify(encrypted.ciphertext); } ``` 引用[2]中提到了使用crypto-js库进行解密的方法。解密的过程与加密相反,需要提供AES密钥(AESKey)和待解密的数据(value)。解密的过程包括以下几个步骤: 1. 将AES密钥转换为UTF-8编码的格式。 2. 根据AES密钥的前16位生成一个偏移量(iv)。 3. 使用AES算法和指定的解密模式(ECB)、填充方式(Pkcs7)对数据进行解密。 4. 将解密后的数据转换为UTF-8编码的格式并返回。 具体的解密方法如下: ```javascript const decryption = (value: string, AESKey: string) => { const key = CryptoJS.enc.Utf8.parse(AESKey); let iv = CryptoJS.enc.Utf8.parse(AESKey.substr(0, 16)); const decrypt = CryptoJS.AES.decrypt(value, key, { iv: iv, mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return CryptoJS.enc.Utf8.stringify(decrypt).toString(); } ``` 引用[3]中提到了crypto-js库的简介。crypto-js是一个纯JavaScript加密算法类库,可以方便地在前端进行各种加解密操作。它支持的算法包括MD5、SHA-1、SHA-256、AES、RSA、Rabbit、MARC4、HMAC、HMAC-MD5、HMAC-SHA1、HMAC-SHA256、PBKDF2等。使用时可以引入整个crypto-js库,也可以单独引入需要使用的算法文件。 你可以通过以下方式下载和使用crypto-js库: 1. 下载地址:https://github.com/brix/crypto-js/releases 2. 引入crypto-js.js文件: ```html <script src="crypto-js.js"></script> ``` 综上所述,你可以使用crypto-js库进行文件加密操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Min;

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值