在将类存储在java中之前加密类的变量

时间:2013-06-25 13:44:22

标签: java xml class variables encryption

我有课:

public class Data{

private int time;
private double avgVelocity;
private double avgAcceleration;
private double avgRhythm;
private int ups;
private int [] pressures;
private double [] velocities;
private double [] accelerations;

public Data(int tm, double vel, double acc, double rtm, int up, 
        int [] press, double [] vels, double [] accs){

    time = tm;
    avgVelocity = vel;
    avgAcceleration = acc;
    avgRhythm = rtm;
    ups = up;
    pressures = press;
    velocities = vels;
    accelerations = accs;
}

public double getTime(){
    return time;
}

...

}

该类存储来自设备的数据。此数据应存储在XML文件中,以便稍后附加到另一个文件中。

我必须具备的是即使附件可见,也要使存储数据的XML不可读。那么我应该加密变量的所有内容,然后将所有不可读的值存储在xml上吗?或者我应该将所有值存储在XML中,然后加密整个文件?或者有更好的方法来实现这一目标吗? (xml中的数据序列化不是问题,我已经这样做了,但是要加密它)

我找不到符合我需求的解决方案。

编辑:根据加密sigle数据字段的XML intead的建议,有什么好办法呢?

3 个答案:

答案 0 :(得分:3)

我会加密整个XML - 减少错误的机会,并且还需要更少的填充(您加密的每个字符串/字节数组可能需要最多16个字节的填充,具体取决于您使用的块模式,因此如果您一次加密整个XML,那么您将限制为16个字节的填充,而如果您在八个单独的块中加密它,那么您可能最多有128个字节的填充)。 Here is an example of using AES to encrypt a string to a byte array - 谷歌提供了大量其他示例,请务必避免使用ECB(电子密码本)模式的示例,因为此模式不安全。您可能还希望在加密XML之前压缩XML(在加密后不要压缩它,这将浪费时间)。这将为您提供一个字节数组,如果您需要一个字符串,那么使用Base64 encoder将字节数组转换为字符串。

正如akostadinov的回答所示,在加密数据时不应重复使用初始化向量 - IV需要是唯一的,但它不需要保密(您可以/应该将其与加密数据一起存储)。

答案 1 :(得分:1)

这取决于您的数据。据我所知,你会有很多重复的值,加密字段可能允许有人对数据做出结论,即使不解密它(例如查看加密序列匹配的位置)。 您的应用程序似乎对安全性不敏感,但如果您加密整个XML或每个完整记录,那么这比加密单个字段要好。

要做的一件事,因为可能不同的用户将使用您的应用程序,它是在第一次启动应用程序时生成加密密钥。否则,您的所有用户都将使用相同的加密密钥,这样就无法实现加密。

答案 2 :(得分:1)

您应该能够创建一个输出流,数据都已准备好加密。如果你关心安全,你应该加密一切。这意味着在您的输出中您将没有XML文件。它将是存储加密XML的字节集。

如果你真的需要强大的安全性,我会用两遍加密文件。

第一遍是加密将写入String的数据。 其次用加密数据在内存中创建XML文件并对其进行加密并写入输出。

第二步应该使用不同的密钥。