シリアル化されたオブジェクトをファイルに保存したいのですが、暗号化したいと思います。本当に強力な暗号化である必要はありません。他の誰かがロードするのを少し難しくする簡単なもの(できれば最大数行のコード)が欲しいだけです。SealedObject を調べましたが、キーが足を引っ張っています。理想的には、オブジェクトを暗号化/復号化するためのキーとして文字列を渡すだけです。
助言がありますか?
シリアル化されたオブジェクトをファイルに保存したいのですが、暗号化したいと思います。本当に強力な暗号化である必要はありません。他の誰かがロードするのを少し難しくする簡単なもの(できれば最大数行のコード)が欲しいだけです。SealedObject を調べましたが、キーが足を引っ張っています。理想的には、オブジェクトを暗号化/復号化するためのキーとして文字列を渡すだけです。
助言がありますか?
このコードを試してください:
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 );
CipherOutPutStream
( http://docs.oracle.com/javase/6/docs/api/javax/crypto/CipherOutputStream.html ) を使用してオブジェクトを ObjectOutputStream に書き込むことは、ここでは簡単で適切な方法かもしれません。
Jasyptを調べる必要があります。これを簡単にするためのユーティリティ関数がたくさんあります。
...
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
textEncryptor.setPassword(myEncryptionPassword);
...
String myEncryptedText = textEncryptor.encrypt(myText);
...
String plainText = textEncryptor.decrypt(myEncryptedText);
...
javax.crypto.SealedObject
間違いなく答えです。キーの問題は何ですか?
一般的な回答として (最近は Java をあまり使用していないため):
複数の形式の暗号化を検索して、目的に適したものを見つけてから、データ用に既に作成されているモジュールを見つけて変更するか、使用したいアルゴリズムに基づいて独自のモジュールを作成することをお勧めします。
たとえば、SHA256 を使用する必要があり、すでに作成されているモジュールを見つけた場合は、必要なデータ ストリームを使用するように変更するだけです。
private ObjectName modifiedSHA256(input stream, ..., ...)
{
// Modified algorithm
}
そして、データストリームをどこかに書きたいときはいつでもそれを呼び出すことができます。その後、モジュールは独自のデータ ストリームを保存し、それがファイルに書き込まれます。
暗号化ライブラリをまったく使用できませんか? あなたの基本的なコードは
Object o=...;
String s= new String();
ObjectOutputStream out = new ObjectOutputStream(StringStream(s));
out.writeObject(o);
そして、必要s
な暗号化システムに渡すだけです。
StringStream
編集: Java ではなく C++ であることを忘れていました。しかし、基本的に同じことを行うことができます。こちらをご覧ください。