将编码对象写入文件

时间:2009-10-25 23:36:07

标签: java file encryption serialization

我正在寻找一种低级加密来为Java中的测试/考试应用程序编写问题/答案。问题和考试都是对象。基本上,我需要一种方法来序列化对象,将其写入文件,同时加密所有内容,这样没有人可以在没有我的程序的情况下阅读问题/答案。

我听说过协议缓冲区(http://code.google.com/apis/protocolbuffers/docs/javatutorial.html),但不确定是否有更新/更好的东西,或者它是否是下一个最好的东西。

干杯 -Tanner

2 个答案:

答案 0 :(得分:4)

您需要两个步骤 - 序列化/反序列化,它将对象转换为可以存储在磁盘上的表示形式;和加密/解密,它加密了磁盘上的表示。

在Java中,您可以使用ObjectOutputStream执行序列化,使用CipherOutputStream执行加密。首先获取FileOutputStream,然后将其传递给CipherOutputStream的构造函数,然后将 传递给ObjectOutputStream的构造函数。然后你可以将你的Serializable对象传递给ObjectOutputStream,它们最终会被序列化,加密并写入文件。 (您当然需要至少对CipherOutputStream对象执行其他设置,但这是基本想法。)

然而,所有这一切都有一个相当大的警告。您正在进行的加密只不过是模糊处理 - 如果您向某人提供加密数据和可以对其进行解密的程序,则该人员拥有自己解密数据所需的所有信息。没有办法解决这个问题 - 如果你的程序可以解密它,那么你的程序就可以拆开并找到它的秘密。

答案 1 :(得分:0)

从您对应用程序的描述来看,性能不是问题。因此,序列化为XML(例如,使用XStream)然后加密XML的解决方案将满足您的要求。

但是,我应该提醒您,有足够激励的学生存在<强烈的风险可能会破解您的加密。我只能想到你可以防范这种情况的方法:

  1. 根本不将加密数据存储在用户的计算机上,或
  2. 使用非对称密码,不要在用户的计算机上进行任何解密。
  3. 如果您不能做其中一个,那么您的应用程序很容易受到攻击。黑客攻击并不像使用文本编辑器读取文件那么简单,但它也不是那么难......即使你通过JAR文件混淆器提供应用程序。