首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >常规文件加密

常规文件加密
EN

Stack Overflow用户
提问于 2012-10-30 18:35:47
回答 2查看 213关注 0票数 0

我想知道是否有人可以给我一些关于文件加密的建议,我目前正在建立一个内部网,它需要的功能之一是用户发送文件给其他用户,http://www.mailbigfile.com/就是我想要实现的一个例子。这目前是通过SSL完成的,我使用PHP在上传之前验证文件类型等。我唯一的问题是,我的雇主希望我在上传文件之前对文件进行加密,他们还希望每个上传的文件都使用随机盐进行加密,作为额外的安全措施。我主要关心的一个问题是,文件类型并没有真正受到限制,所以它可以是从jpeg到word文档的任何文件,到目前为止,我发现用php加密word和pdf文档很困难。所以我想知道是否有人能给我以下的建议

1.如果使用SSL并限制对目录的直接访问,是否需要对文件进行加密

2.我是否应该使用php进行加密,例如MCRYPT,或者是否有替代方案。在上一篇文章中,有人推荐使用PEAR

Php file encryption methods. Does something simple exist?

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2012-10-30 18:43:30

1)不是为了传输,但我认为这里的重点是以一种安全的方式存储文件,这样即使你以某种方式获得了文件的访问权限,你也不能在不知道其加密和盐的情况下使用它。您将生成盐,并将其与对文件的引用一起保存在数据库中。其想法是,如果有人获得了对文件的访问权限,但没有获得db,那么这些文件将是无用的,因为攻击者对该文件一无所知。当有人请求下载该文件时,您需要在将其发送到客户端之前对其进行解密。我猜这就是你的需求吧?

2)我会做一个回退,使用模块中的mcrypt函数,如果没有回退到PEAR,则使用mcrypt函数,因为pear会比模块慢。但是您说它是一个内部网,所以添加mcrypt模块应该很容易。

票数 1
EN

Stack Overflow用户

发布于 2012-10-30 19:06:42

在上传之前加密每个文件意味着它必须在客户端计算机上进行。因此,这必须使用单独的程序(比如GNU )或在浏览器中完成,例如AES via Javascript (或者Java applet,或者Flash,它们做同样的事情)。

加密通过SSH传输的文件不是必需的,因为协议已经这样做了。然而,虽然文件在“网络上”是安全的,但任何有权访问接收方计算机(和服务器)的人都可以读取该文件。如果这是一个问题,您必须对文件进行加密。

最大的挑战是以安全的方式在发送者和接收者之间传递加密密钥。这完全不是微不足道的,如果做得不对,就会使多层加密和添加大量盐的整个过程变得无用。例如,如果加密密钥位于接收方(通过SSH)下载文件的服务器上,则对该服务器具有足够访问权限的任何人(管理员或入侵者)都可以使用存储在该服务器上的密钥来解密文件,从而使所有加密都无用。公钥密码术是解决这个问题的一种方法。我之前提到过GNU PG吗?

至于"salt",这是一个错误的术语,您可能指的是“初始化向量”(salt是用于哈希函数,而不是用于加密)。

“需要个人IV”需求的解决方案相当简单:在客户端计算机上生成一个或两个块的伪随机数据(还要添加一些真正的随机或非随机但可变的数据,例如,如果可以,像nanotime这样的数据)。对于AES,两个块将是32字节(256位),这顺便是几个现代密码散列函数的输出大小。

例如,这使得将10-20个伪随机字符(即使是来自糟糕的生成器)与纳秒时间戳、来自附近SQL服务器的SELECT RAND();、服务器回答所需的时间以及浏览器历史记录中的5个最后查看站点连接在一起,将所有这些输入到SHA-256中,并将输出用作实际上不可预测的初始化向量。

将文件传输给收件人后,对其进行解密,并忽略前32个字节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13137189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档