有没有一种简单的方法来加密java对象?

时间:2013-06-05 22:16:26

标签: java object encryption

我想将序列化对象存储到文件中,但我想将其加密。它不需要真正强大的加密。我只想要一些简单的东西(最好是几行代码),这会让其他人加载起来更加困难。我已经看过SealedObject,但关键是让我抱怨。理想情况下,我只想传递一个String作为加密/解密对象的密钥。

有什么建议吗?

7 个答案:

答案 0 :(得分:9)

试试这段代码:

String fileName = "result.dat"; //some result file

//You may use any combination, but you should use the same for writing and reading
SecretKey key64 = new SecretKeySpec( new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }, "Blowfish" );
Cipher cipher = Cipher.getInstance( "Blowfish" );

//Code to write your object to file
cipher.init( Cipher.ENCRYPT_MODE, key64 );
Person person = new Person(); //some object to serialise
SealedObject sealedObject = new SealedObject( person, cipher);
CipherOutputStream cipherOutputStream = new CipherOutputStream( new BufferedOutputStream( new FileOutputStream( fileName ) ), cipher );
ObjectOutputStream outputStream = new ObjectOutputStream( cipherOutputStream );
outputStream.writeObject( sealedObject );
outputStream.close();

//Code to read your object from file
cipher.init( Cipher.DECRYPT_MODE, key64 );
CipherInputStream cipherInputStream = new CipherInputStream( new BufferedInputStream( new FileInputStream( fileName ) ), cipher );
ObjectInputStream inputStream = new ObjectInputStream( cipherInputStream );
SealedObject sealedObject = (SealedObject) inputStream.readObject();
Person person1 = (Person) sealedObject.getObject( cipher );

答案 1 :(得分:5)

使用CipherOutPutStreamhttp://docs.oracle.com/javase/6/docs/api/javax/crypto/CipherOutputStream.html)将对象写入ObjectOutputStream可能是一种简单而好的方法。

答案 2 :(得分:3)

你应该研究Jasypt。它有许多实用功能,可以轻松实现。

...
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
textEncryptor.setPassword(myEncryptionPassword);
...
String myEncryptedText = textEncryptor.encrypt(myText);
...
String plainText = textEncryptor.decrypt(myEncryptedText);
...

答案 3 :(得分:0)

你不能使用任何加密库吗?你的基本代码是

Object o=...;
String s= new String();
ObjectOutputStream out = new ObjectOutputStream(StringStream(s));
out.writeObject(o);

然后你只需将s传递给你想要的任何加密系统。

编辑:我忘记了stringStream是一个c ++的东西,而不是Java,但你可以基本做同样的事情,看看here

答案 4 :(得分:0)

作为一般答案(因为我现在不使用Java):

我建议您搜索多种形式的加密并找到适合您想要做的事情,然后找到并修改已经为您的数据编写的模块,或者根据您想要使用的算法编写自己的模块

例如,如果您想使用SHA256并找到已经为您编写的模块,只需修改它以使用您想要的数据流。

private ObjectName modifiedSHA256(input stream, ..., ...)
{
    // Modified algorithm
}

然后,只要您想在某处写入数据流,就可以调用它。然后,模块将保存自己的数据流,然后将其写入文件。

答案 5 :(得分:0)

javax.crypto.SealedObject绝对是答案。钥匙有什么问题?

答案 6 :(得分:0)

使用SealedObject和Cipher类加密和解密对象。

什么是SealedObject?

SealedObject封装了原始的java对象(它应该实现Serializable)。它使用加密算法来密封对象的序列化内容。

什么是密码?

这是一个java类,使用加密算法进行加密和解密。

示例代码

下面是示例代码。

EncriptThisClass so = new EncriptThisClass();
SealedObject encryptedObject =encryptObject(so);
EncriptThisClass etcObject=decryptObject(encryptedObject);

有关完整代码,请访问以下链接。 http://javaant.com/object-encryption-decryption-in-java/#.VvkA6RJ96Hs