欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > vue引入sm-crypto通过sm4对文件进行加解密,用户输入密码

vue引入sm-crypto通过sm4对文件进行加解密,用户输入密码

2025/2/24 17:36:26 来源:https://blog.csdn.net/cc1314_/article/details/140369655  浏览:    关键词:vue引入sm-crypto通过sm4对文件进行加解密,用户输入密码

对文件加密并保存:

import { sm4 } from 'sm-crypto'fetch("你的文件地址") .then(response => response.blob()) .then(byteStream => {const reader2 = new FileReader();reader2.onload = function(event) {const arrayBuffer = event.target.result;let keyBytes = new Uint8Array(arrayBuffer);let password = stringToHex("用户输入的密码");let code = sm4.encrypt(keyBytes,password, {output: 'array'})  let byteStream1 = new Blob([code], { type: 'application/octet-stream' });let link = document.createElement('a');link.href = URL.createObjectURL(byteStream1);link.download = "你保存的文件名";document.body.appendChild(link);link.click();document.body.removeChild(link);};// 以ArrayBuffer形式读取文件reader2.readAsArrayBuffer(byteStream);})function stringToHex(str) {let hex = '';for (let i = 0; i < str.length; i++) {hex += str.charCodeAt(i).toString(16);}// 如果转换后的16进制字符串长度不足32,则在前面填充0while (hex.length < 32) {hex = '0' + hex;}return hex;}

读取文件并解密:

<input type="file" id="keyInput" accept="*" @change="readKeyFile" />function readKeyFile() {const keyInput = document.getElementById('keyInput');const file = keyInput.files[0];const reader = new FileReader();reader.onload = function(event) {const arrayBuffer = event.target.result;let plainByte = JSON.parse("["+arrayBuffer+"]");let password = stringToHex("用户输入的密码");try{let pBytes = sm4.decrypt(plainByte,password, {output: 'array'});let prBytes = arrayToBuffer(pBytes);privateKeyBytes = new Uint8Array(prBytes);}catch(e){alert('文件或密码错误');return;}let decoder = new TextDecoder();let alltext = decoder.decode(privateKeyBytes);console.log(alltext)//你的文件内容};// 读取文件reader.readAsText(file);}
function stringToHex(str) {let hex = '';for (let i = 0; i < str.length; i++) {hex += str.charCodeAt(i).toString(16);}// 如果转换后的16进制字符串长度不足32,则在前面填充0while (hex.length < 32) {hex = '0' + hex;}return hex;}function arrayToBuffer(arr) {let buffer = new ArrayBuffer(arr.length);let view = new Uint8Array(buffer);for (let i = 0; i < arr.length; i++) {view[i] = arr[i];}return buffer;}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词