从谷歌应用引擎上传和加密任何文件

时间:2012-03-08 02:29:21

标签: google-app-engine servlets encryption upload

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

我现在希望合并文件上传(附件)功能。因此,当用户附加文件(可以是 ANY 文件,jpg,gif,txt,pdf,doc,exe等等)时,它首先被加密然后存储。我想解释任何文件,如txt文件(一系列字符),以便加密/解密可以通过现有代码完成。 (这是否有意义?我正在考虑这个问题,因为您可以在记事本中打开任何文件并将文件视为一系列字符)。我想限制附件的大小,如5-10 Mb,但如果由于某种原因,这只能用于更小的尺寸(<1Mb),即使那样对我也没关系。

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

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

谢谢!!

1 个答案:

答案 0 :(得分:1)

嗯,简单的asnwer是肯定的:它可以完成。正常操作是将文件读取为二进制文件,加密数据,然后对其进行64位编码。然后,接收侧基站64对其进行解码,对其进行解密并可能写入数据。 Base 64会增加数据,每3个字节使用4个字符(最后可能是一个或两个填充字节)。

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

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

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