Est-ce Java code de cryptage "thread-safe"?

Je veux utiliser le code suivant pour un haut-simultanéité de l'application où certaines données doivent être chiffrées et déchiffrées. J'ai donc besoin de savoir quelle est la partie de ce code doit être synchronisé, le cas échéant, pour éviter imprévisible questions.

public class DesEncrypter {
Cipher ecipher;
Cipher dcipher;
//8-byte Salt
byte[] salt = {
(byte)0xA9, (byte)0x9B, (byte)0xC8, (byte)0x32,
(byte)0x56, (byte)0x35, (byte)0xE3, (byte)0x03
};
int iterationCount = 19;
DesEncrypter(String passPhrase) {
try {
//Create the key
KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt, iterationCount);
SecretKey key = SecretKeyFactory.getInstance( "PBEWithMD5AndDES").generateSecret(keySpec);
ecipher = Cipher.getInstance(key.getAlgorithm());
dcipher = Cipher.getInstance(key.getAlgorithm());
//Prepare the parameter to the ciphers
AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount);
//Create the ciphers
ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
} catch (...)
}
public String encrypt(String str) {
try {
//Encode the string into bytes using utf-8
byte[] utf8 = str.getBytes("UTF8");
//Encrypt
byte[] enc = ecipher.doFinal(utf8);
//Encode bytes to base64 to get a string
return new sun.misc.BASE64Encoder().encode(enc);
} catch (...)
}
public String decrypt(String str) {
try {
//Decode base64 to get bytes
byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);
//Decrypt
byte[] utf8 = dcipher.doFinal(dec);
//Decode using utf-8
return new String(utf8, "UTF8");
} catch (...)
}
}

Si je crée un nouveau chiffrement dans le encrypt() et decrypt() méthodes pour chaque invocation, alors je peux éviter les problèmes de simultanéité, je ne sais pas si il y a beaucoup de frais généraux pour obtenir une nouvelle instance d'un chiffre pour chaque invocation.

   public String encrypt(String str) {
try {
//Encode the string into bytes using utf-8
byte[] utf8 = str.getBytes("UTF8");
//Encrypt
//new cipher instance
ecipher = Cipher.getInstance(key.getAlgorithm());
byte[] enc = ecipher.doFinal(utf8);
//Encode bytes to base64 to get a string
return new sun.misc.BASE64Encoder().encode(enc);
} catch (...)

OriginalL'auteur user646584 | 2011-03-15