vue3 点击图标从相册选择二维码图片,并使用jsqr解析二维码(含crypto-js加密解密过程)

在这里插入图片描述

vue3 点击图标从相册选择二维码图片,并使用jsqr解析二维码(含crypto-js加密解密过程)

1.安装 jsqr 和 crypto-js

npm install -d jsqr
npm install crypto-js

2.在util目录下新建encryptionHelper.js文件,写加密解密方法。

// encryptionHelper.js 内容,可直接复制。
const CryptoJS = require("crypto-js");

// 密钥和初始化向量应该是随机生成的,这里为了示例简单使用固定的字符串
const ss = CryptoJS.enc.Utf8.parse("sdgdfjytyjkueesh"); // 密钥必须为:8/16/32位
const sss = CryptoJS.enc.Utf8.parse("fhgtdytestgrjrtd"); // 初始化向量
//加密
export function encryptUtil(message) {
  let encrypted = CryptoJS.AES.encrypt(JSON.stringify(message), ss, {
    iv: sss,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7,
  });
  let data = encrypted.toString();
  return data;
}
//解密
export function decryptUtil(encrypt) {
  var decrypt = CryptoJS.AES.decrypt(encrypt, ss, {
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7,
    iv: sss,
  }).toString(CryptoJS.enc.Utf8); //【注】:加密的时候必须转成字符串 使用toString。 解密的时候 必须使用utf8的格式
  return decrypt; // 将解密后的数据转换为 UTF-8 字符串
}

3.在页面引入 jsqr 和 encryptionHelper.js 文件

import { encryptUtil,decryptUtil } from "../util/encryptionHelper.js";//加密解密工具
import jsQR from "jsqr";

4.项目中使用

<template>
<!-- 相册选择区域 -->
        <div>
          <input
            type="file"
            accept="image/*"
            @change="onFileSelected"
            ref="fileInput"
            style="display: none"
          />
          <img
            src="@/assets/scan.png"
            style="
              position: absolute;
              width: 50px;
              height: 50px;
              right: 10px;
              bottom: -50px;
              z-index: 10;
            "
            alt=""
            @click="selectFromFile"
          />
        </div>
</template>
......
import { encryptUtil,decryptUtil } from "../util/encryptionHelper.js";//加密解密工具
import jsQR from "jsqr";
// !!!!!注:encryptUtil为加密方法,此处省略
// let encryData = encryptUtil(param);//param为加密前的数据,encryData 为加密过后的数据

// 识别二维码功能(含解码方法的调用)-----------------------------------------------------------
const fileInput = ref(null);
// 从相册选择图片并解析二维码
const onFileSelected = async (event) => {
  const file = event.target.files[0];
  if (!file) return;
  const reader = new FileReader();
  reader.onload = (e) => {
    const img = new Image();
    img.src = e.target.result;
    img.onload = () => {
      const canvas = document.createElement("canvas");
      const context = canvas.getContext("2d");
      canvas.width = img.width;
      canvas.height = img.height;
      context.drawImage(img, 0, 0);
      const imageData = context.getImageData(0, 0, canvas.width, canvas.height);
      const decodedResult = jsQR(imageData.data, imageData.width, imageData.height, {
        inversionAttempts: "dontInvert",
      });
      if (decodedResult) {
        var data = decryptUtil(decodedResult.data);//解密
        console.log(111111111111111,data);
       // var dataa = JSON.parse(data);//按需使用
       // data 是解析出来的数据,是否需要转化格式,自行处理
      } else {
        alert("未检测到二维码");
      }
    };
  };
  reader.readAsDataURL(file);
};
// 触发文件选择对话框
const selectFromFile = () => {
  fileInput.value.click();
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值