2 l603430 l603430 于 2013.08.18 14:01 提问

网页上传文件时怎么把文件加密后上传
我想在html页面选择一个上传文件,在js获得这个文件的信息,然后对这个文件进行对称加密后再上传。初步想法是把文件是以数据流发到后台再生成一个完整文件的,但怎么获得这个文件的数据流?另一个想法是把先把文件转成字符串,然后加密,再把字符串生成文件2,然后上传,但怎样才能转成字符串并且把加密的字符串转回文件?

请大神解答,感激不尽

1个回答

todd_leftcode
todd_leftcode   2013.08.18 18:36
已采纳

在Web架构中如果要保密, 最简单最安全的方法是使用HTTPS协议。

用js获取文件数据流是可以的, 但需要新版浏览器的支持, 通过 HTML5 File API 可以作到。 生成文件2可能有些麻烦, 这需要用户额外的授权。 通过 XMLHttpRequest (Level 2) 可以直接上传二进制数据。

最复杂的是对称加密, js 缺乏内置的加密API, 自己实现虽不是完全不可能,但恐怕难度较大,或许网络上有现成的开源代码, 可以去找一找。

关键问题是, 如何分发密钥? 通过明文分发肯定是没有意义的, 可能的方案是: 使用用户登录的密码做为种子密钥, 但随之而来的问题是如何保护用户的密码(不能明文发送), 所以这又需要使用kerberos之类的方案解决。

最终HTTPS方案完美胜出

l603430
l603430 区别是,文件离开客户端时必须是已加密状态,不管使用哪种协议传输。嗯,我找到解决办法了,十分感谢
4 年多之前 回复
todd_leftcode
todd_leftcode 加密不需要转为字符串, 加密是二进制运算
4 年多之前 回复
todd_leftcode
todd_leftcode “我不是想安全传送到服务器,而是想把文件加密传到服务器” 到底有何区别?
4 年多之前 回复
l603430
l603430 我不是想安全传送到服务器,而是想把文件加密传到服务器,因为服务器可能会被入侵。主要的问题是对上传的文件1转化为字符串,然后把字符串对称加密后再转回文件2。因为上传和加密是同步进行的,无法预先进行加密。对称加密不分是打算随机生成一个密钥,然后上传时服务器发来用户的非对称密钥的公钥,对对称密钥进行加密后和文件一起传到服务器
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!