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

xxb16uws  于 2021-06-30  发布在  Java
关注(0)|答案(7)|浏览(474)

我想存储一个序列化的对象到一个文件,但我想使它加密。它不需要真正的强加密。我只想要一些简单的东西(最好是一对夫妇的代码最大行),这将使它更难为其他人加载。我已经查过了,但钥匙挡住了我。理想情况下,我只想传递一个字符串作为加密/解密对象的密钥。
有什么建议吗?

sz81bmfz

sz81bmfz1#

一般来说(因为我现在很少使用java):
我建议搜索多种形式的加密,找到适合您的加密方式,然后查找并修改已经为您的数据编写的模块,或者根据您希望使用的算法编写自己的模块。
例如,如果您想使用sha256并发现已经为您编写了一个模块,只需修改它以使用所需的数据流。

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

然后,您可以随时调用它来编写数据流。然后,模块将保存自己的数据流,然后将其写入文件。

cczfrluj

cczfrluj2#

你应该调查一下jasypt。它有一系列的实用函数来简化这个过程。

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

bxfogqkk3#

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

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

然后你就过去了 s 任何你想要的加密系统。
编辑:我忘了 StringStream 是c++的东西,不是java的。但你基本上可以做同样的事情,看看这里。

k3fezbri

k3fezbri4#

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

6vl6ewon

6vl6ewon5#

使用sealedobject和cipher类对对象进行加密和解密。
什么是sealedobject?
sealedobject封装原始java对象(它应该实现可序列化)。它使用加密算法来密封对象的序列化内容。
什么是密码?
这是一个java类,使用加密算法进行加密和解密。
样本代码
下面是示例代码。

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

完整的代码请访问下面的链接。http://javaant.com/object-encryption-decryption-in-java/#.vvka6rj96hs

ibrsph3r

ibrsph3r6#

使用 CipherOutPutStream (http://docs.oracle.com/javase/6/docs/api/javax/crypto/cipheroutputstream.html)在这里,将对象写入objectoutputstream可能是一种简单而好的方法。

uqjltbpv

uqjltbpv7#

请尝试以下代码:

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 );

相关问题