小编Gij*_*aar的帖子

客户端(javascript)文件上传加密

我正在尝试构建一种加密文件客户端并上传它的方法.目标是将加密的文件存储在服务器上,只有最终用户才能解密文件.这个问题之前有过一些问题,但我认为我取得了一些进展.

我的计划是使用新的Javascript File API来操作文件并上传它.加密可以使用Stanford Javascript Crypto Library完成.应该以块的形式读取文件,以便它不会完全读入内存.然后,每个块都由crypt库加密.我无法弄清楚如何实现这一点.首先,我有这个:

var fd = new FormData();
var file = document.getElementById('file').files[0];
fd.append("file", file);
var xhr = new XMLHttpRequest();
xhr.open("POST", "/upload/");
xhr.send(fd);
Run Code Online (Sandbox Code Playgroud)

这只是一个普通的javascript上传.我正在尝试构建一个模仿File对象行为的Crypt对象,并将其传递给FormData.对于formdata读取的每个数据块,对象应从文件中读取一个块并加密.我只是无法弄清楚FormData如何处理File对象以及是否可以复制此行为.我不确定这是否是正确的方法,任何人都有建议?

更新:好的,我现在更进一步.我正在使用file.slice以块的形式读取文件.然后使用BlobBuilder将每个块加密并转换回blob.然后将此blob放入FormData对象并提交给服务器.服务器将连接这些blob.使用浏览器加密和解密一个块正在运行.现在我正在下载和解密多个块.

还有一些问题需要解决:

  • 文件名丢失,尚无法为文件对象设置FileName.
  • 加密仍然阻塞(没有ui更新),但我想我可以通过webworkers解决这个问题.
  • 下载时我无法预测块大小.未加密的块大小是已知的,但对于加密数据,这似乎有所不同.这个加密数据以JSON格式存储,我不想做字符串搜索}.而且我不想存储这个服务器端.
  • 虽然我正在读取文件块,但Firefox似乎有内存泄漏或将完整文件读入内存.这成为多千兆字节文件的问题.

javascript encryption file-upload

9
推荐指数
1
解决办法
9332
查看次数

Python .NET,多线程和windows事件循环

我正在使用Python .NET围绕黑盒.NET DLL构建Python API.DLL只进行网络操作.DLL要求我运行一个窗口消息泵循环,否则网络操作会在一段时间后卡住.我System.Windows.Forms.Application.Run()在主线程中使用windows消息循环.这适用于仅接收数据.当我开始从其他Python线程调用DLL时,我的程序开始表现得很奇怪.我认为它与线程有关,因为问题非常不规律 - 网络事件消失或进入很晚.据我所知,Python和C#是线程安全的,但也许是因为多层包装出错了.

所以我有几个问题:

  • 从多个Python theads中调用DLL是不是一个坏主意?或者这取决于DLL内部?我认为从DLL的角度来看,由于GIL,Python线程被视为一个单独的代理.

  • 使用此DLL的每个Python线程是否都需要消息泵?

  • 将所有DLL交互保存在一个线程中可能是个好主意.我很难完成这个,因为我控制主线程中的消息泵循环.我天真的方法是将我的工作线程中生成的新传出网络消息放在Python队列上,在主线程中创建一个自定义消息泵循环来执行windows事件处理,但也监视我的队列,如果有消息则会执行调用DLL.但是对于这么简单的任务来说,这一切都非常笨重而且很多工作.这是正确的方法吗?

  • 是否有另一种方法将函数放在主窗口事件循环中,监视前面描述的队列并采取行动?或者我应该深入研究.NET细节并开始使用.NET事件或调度程序?

c# python dll multithreading python.net

4
推荐指数
1
解决办法
755
查看次数