Belirli bir veri şifrelenmiş ve şifresi çözülmüş olması gereken yüksek eşzamanlı bir uygulama için aşağıdaki kodu kullanmak istiyorum. Bu nedenle, tahmin edilemeyen sorunlardan kaçınmak için, eğer bu kodun hangi bölümünün senkronize edilmesi gerektiğini bilmem gerekiyor. Ben şifrelemek (yeni şifre oluşturma) ve her ayin için) (yöntemleri deşifre olursa yükü bir sürü yeni almakla varsaBu Java şifreleme kodu iş parçacığı güvenli mi?
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 (...)
}
}
, o zaman ben emin değilim sadece, eşzamanlılık sorunları önleyebilirsiniz Her bir çağrı için bir şifre örneği.
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 (...)
Bunu bilmiyordum, teşekkürler. Salt ve pass deyimini, yalnızca uygulama için mevcut olan katı işletim sistemi izinleri altında ayrı dosyalarda depolamayı planlıyorum. – user646584
Sabit bir tuz kullanmak (korumalı olsa bile) ilk etapta bir tuz kullanma noktasını büyük ölçüde bozar. –
Tiyatronun çalışma zamanında rastgele elde edilmesi gerektiğini mi söylüyorsunuz? Kafam karıştı, açık bir şekilde veri şifreli bir kez bir kez değişmez, öyleyse neyin güvenli bir dosya, tuz ve parola, sadece parola, vb. – user646584