浏览器上进行文件 AES 加密解密

2020-02-23 19:50:23 +08:00
 xuthus

我觉得这是一个奇葩的问题,但是我现在有这样的需求,文件上传前,先在浏览器上进行 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);
            }
6253 次点击
所在节点    JavaScript
23 条回复
kaicity
2020-02-24 00:38:50 +08:00
@muzuiget +1,外网+翻译即视感
wizardoz
2020-02-24 10:06:43 +08:00
https 不是已经做了这个事了吗?不相信浏览器?
also24
2020-02-24 13:52:38 +08:00
@wizardoz
https 保证的是传输过程中的安全性,服务端可以解密出完整的明文数据。
楼主这样做之后,发给服务端的也是密文,服务端在没有密码的情况下,只负责存储,无法解密。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/646889

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX