我觉得这是一个奇葩的问题,但是我现在有这样的需求,文件上传前,先在浏览器上进行 AES 加密,在文件下载时,先进行 AES 解密再存储本地。我该如何操作,我目前正在 VUE 项目中尝试这些操作,我使用https://github.com/brix/crypto-js 来进行操作,感觉它非常流行,但是发现我只能对文本文件进行处理,对于图片之类的文件我无法操作。 附上我的部分代码
Encode() {
if (this.file === null) {
console.log('file not exist!')
}
var CryptoJS = require('crypto-js');
this.file_mime = this.file.type;
this.file_name = this.file.name;
//读取本地文件
var reader = new FileReader();
//读取完毕后触发
reader.onload = () => {
let key = '1234567887654321';
var encrypted = CryptoJS.AES.encrypt(reader.result,key).ciphertext.toString();
this.file2 = new Blob([encrypted], {type: 'application/octet-stream'});
const a = document.createElement("a");
const url = window.URL.createObjectURL(this.file2);
const filename = this.file_name;
a.href = url;
a.download = filename;
a.click();
window.URL.revokeObjectURL(url);
};
reader.readAsDataURL(this.file);
},
Decode() {
if (this.file === null) {
console.log('file not exist!')
}
var CryptoJS = require('crypto-js');
//读取本地文件
var reader = new FileReader();
//读取完毕后触发
reader.onload = () => {
let key = '1234567887654321';
var decrypted = CryptoJS.AES.decrypt(reader.result,key).toString(CryptoJS.enc.Utf8);
//Blob 生成
this.file2 = new Blob([decrypted], {type: this.file_mime});
const a = document.createElement("a");
const url = window.URL.createObjectURL(this.file2);
const filename = this.file_name;
a.href = url;
a.download = filename;
a.click();
window.URL.revokeObjectURL(url);
};
reader.readAsText(this.file);
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.