从谷歌应用程序引擎上传并加密任何文件



我正在为GAE的大学做一个小项目(使用Java),在这个项目中,我实现了一种"消息服务"形式,当用户向另一个用户发送消息时,该消息使用Java加密库通过128位AES加密,然后存储在服务器上。然后,收件人必须输入生成的密钥才能阅读邮件。

我现在想将文件上传(附件)功能纳入其中。因此,当用户附加一个文件(可以是ANY文件、jpg、gif、txt、pdf、doc、exe等)时,首先对其进行加密,然后进行存储。我想将任何文件解释为txt文件(一系列字符),这样就可以通过现有代码进行加密/解密。(这有意义吗?我之所以这么想,是因为你可以在记事本中打开任何文件,并将文件视为一系列字符)。我想把附件的大小限制在5-10Mb左右,但如果出于某种原因,这只能用于更小的大小(<1Mb),那么我也可以。

因此,如果用户附加了一个文件,比如abc.exe,我会将其解释为txt文件abc.txt,并将其与消息一起加密。然后,当收件人输入正确的密钥时,我解密消息和文件abc.txt,但作为abc.exe。(我可以要求用户首先将任何文件转换为.txt,但这会很尴尬)

这能做到吗我是web开发、servlet和GAE的新手(我的第一个项目使用了其中的任何一个),所以请耐心等待。

谢谢!!

好吧,简单的asnwer是肯定的:它是可以做到的。通常的操作是将文件读取为二进制文件,对数据进行加密,然后基站64对其进行编码。然后接收端基站64对它进行解码、解密,并可能写入数据。不过,基64将增长数据,每3个字节使用4个字符(最后可能还有一个或两个填充字节)。

如果您需要更多信息,例如文件名,则需要为数据创建某种容器并对其进行加密。一种解决方案是使用ASN.1,尽管它具有相对较大的学习曲线。

要查看此示例,请查看SMIME规范和CMS(加密消息语法),后者定义了带有加密附件的邮件。CMS被广泛使用。CMS在Bouncy Castle的bcmail(或后续)包中提供。

请注意,如果要创建加密的在线协议,则需要某种身份验证/完整性保护。可能还需要一个良好的PKI基础设施。这是一个相当大的项目。

最新更新