JavaScript加密文件上传

5

有没有一种使用JavaScript或Ajax加密文件上传的方法?如果有,请给我一个示例或链接到有效示例的链接。


那么 http://tutorialzine.com/2013/11/javascript-file-encrypter/ 呢?它介绍了在HTML 5中引入的FileSystem API的基础知识以及JavaScript中的加密技术。 - Kyle
可能是Progressive Upload and Encryption with CryptoJS的重复问题。 - Rich
2个回答

11
答案是肯定的,有一种使用javascript或ajax加密文件上传的方法。您可以使用标准Web API,在浏览器中内置原生支持:使用标准File APIWebCrypto API从文件系统获取文件并实际加密它 - 连同Indexed Database API (indexedDB)(如果需要)将加密文件存储在浏览器中的客户端侧。一个好的简单示例与工作代码在Upload a file, encrypt it, calculate the hash and store the results using indexedDB
如何操作的简短总结:
第一步只是在HTML中创建一个input type=file元素,并绑定一个函数,以从文件系统获取文件并对其进行某些操作;例如,使用onsubmit="my_file_handler"
在此之后,在您的my_file_handler函数(或其他名称)中:
  1. 使用 .files[…] 来获取输入文件。
  2. 定义一个函数,它接受一个加密密钥;在该函数内部:

    • 创建一个新的 FileReader 对象,并使用例如 .readAsArrayBuffer(…) 来加载文件
    • 使用 crypto.subtle 创建一个新的 SubtleCrypto 对象
    • 使用 .digest(…) 与该 SubtleCrypto 对象,然后使用 crypto.subtle.encrypt(…) 用该密钥实际加密文件
    • 使用 indexedDB.open(…) 和相关方法打开到数据库的连接,并将加密文件放入其中。
  3. 使用 .importKey(…) 获取密钥,并在其中调用步骤 #2 中的函数来处理输入文件,并使用 indexedDB 存储它。

-1

使用HTTPS URL上传文件,浏览器会自动加密数据以进行传输。

(这假设您想保护文件在传输过程中,而不是试图保护文件免受服务器管理员权限的人员攻击)


@user1503941 — 我提醒您查看这个答案的第二段,那里有提到这一点。 - Quentin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接