com.esotericsoftware.kryo.serializers.BlowfishSerializer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of kryo Show documentation
Show all versions of kryo Show documentation
Fast, efficient Java serialization
package com.esotericsoftware.kryo.serializers;
import java.io.IOException;
import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.spec.SecretKeySpec;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.KryoException;
import com.esotericsoftware.kryo.Serializer;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
/** Encrypts data using the blowfish cipher.
* @author Nathan Sweet */
public class BlowfishSerializer extends Serializer {
private final Serializer serializer;
static private SecretKeySpec keySpec;
public BlowfishSerializer (Serializer serializer, byte[] key) {
this.serializer = serializer;
keySpec = new SecretKeySpec(key, "Blowfish");
}
public void write (Kryo kryo, Output output, Object object) {
Cipher cipher = getCipher(Cipher.ENCRYPT_MODE);
CipherOutputStream cipherStream = new CipherOutputStream(output, cipher);
Output cipherOutput = new Output(cipherStream, 256) {
public void close () throws KryoException {
// Don't allow the CipherOutputStream to close the output.
}
};
kryo.writeObject(cipherOutput, object, serializer);
cipherOutput.flush();
try {
cipherStream.close();
} catch (IOException ex) {
throw new KryoException(ex);
}
}
public Object read (Kryo kryo, Input input, Class type) {
Cipher cipher = getCipher(Cipher.DECRYPT_MODE);
CipherInputStream cipherInput = new CipherInputStream(input, cipher);
return kryo.readObject(new Input(cipherInput, 256), type, serializer);
}
public Object copy (Kryo kryo, Object original) {
return serializer.copy(kryo, original);
}
static private Cipher getCipher (int mode) {
try {
Cipher cipher = Cipher.getInstance("Blowfish");
cipher.init(mode, keySpec);
return cipher;
} catch (Exception ex) {
throw new KryoException(ex);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy