我正在GAE为大学做一个小项目(使用Java),在这个项目中,我实现了一种形式的“消息传递服务”,当用户向另一个用户发送消息时,该消息使用Java密码库用128位AES加密,然后存储在服务器上。然后,接收方必须输入结果密钥才能读取邮件。
我现在想要结合文件上传(附件)的功能。因此,当用户附加一个文件(可以是任何文件、jpg、gif、txt、pdf、doc、exe等)时,它首先被加密,然后存储。我希望将任何文件解释为txt文件(字符序列),这样就可以通过现有代码进行加密/解密。(这有道理吗?我之所以这样想,是因为您可以在记事本中打开任何文件,并将该文件视为字符序列)。我想把附件的大小限制为5-10 Mb,但如果出于某种原因只能对更小的尺寸(<1Mb)这样做,那么我也没问题。
因此,如果用户附加了一个文件,比如abc.exe,我将它解释为txt文件,abc.txt,并与消息一起加密它。然后,当收件人输入正确的密钥时,我解密消息和文件abc.txt,但充当abc.exe。(我可以要求用户首先将任何文件转换为.txt,但这会很尴尬)
这能办到吗?我是一个网络开发新手,servlet和GAE (我的第一个项目使用这些),所以请容忍我。
谢谢!!
发布于 2012-03-08 17:07:30
嗯,简单地说是的:它是可以做到的。正常操作是将文件读取为二进制文件,对数据进行加密,然后以64为基础对其进行编码。然后接收侧基地64对其进行解码、解密并可能写入数据。然而,Base 64将增长数据,每3个字节使用4个字符(最后可能是一个或两个填充字节)。
如果您需要它的更多信息,比如文件名,您需要为数据创建某种类型的容器并对其进行加密。一个解决方案是使用ASN.1,尽管这有一个相对较大的学习曲线。
要查看这方面的示例,请查看SMIME规范和CMS (加密消息语法),后者定义了带有加密附件的邮件。CMS有着广泛的应用。CMS可以在bcmail (或后续的) Bouncy城堡包中获得。
请注意,如果要使用加密创建在线协议,则需要某种身份验证/完整性保护。还可能需要一个良好的PKI基础设施。这是一个相当大的项目要进行。
https://stackoverflow.com/questions/9612133
复制相似问题