Реализуйте Java SecretKey, который поддерживает уничтожение и является потокобезопасным.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Реализуйте Java SecretKey, который поддерживает уничтожение и является потокобезопасным.

Сообщение Anonymous »

Я пишу собственную реализацию Java SecretKey, которая поддерживает уничтожение и является потокобезопасной. Пожалуйста, смотрите мой код ниже:

Код: Выделить всё

public class DSecretKey implements SecretKey, KeySpec {

final String algorithm;
final byte[] key;
final AtomicBoolean destroyed = new AtomicBoolean(false);

public DSecretKey(byte[] key, String algorithm) {
Asserts.notNull(key);
this.key = key.clone(); this.algorithm = algorithm;
}

@Override
public String getAlgorithm() { return this.algorithm; }

@Override
public String getFormat() { return "RAW"; }

@Override
public byte[] getEncoded() {
if (isDestroyed()) throw new IllegalStateException("The key is destroyed.");
return this.key.clone();
}

@Override
public boolean isDestroyed() { return this.destroyed.get(); }

@Override
public void destroy() throws DestroyFailedException {
if (!this.destroyed.compareAndSet(false, true)) {
CryptoUtils.clear(this.key);
}
}
}
Как видите, я использую AtomicBoolean для управления уничтоженным состоянием ключа.
Вопрос: Следует ли В этом случае я не использую AtomicBoolean, а вместо этого использую логический тип данных с синхронизированным, изменчивым или Java Lock? Какой метод лучше?
Примечание. Ключ можно использовать/повторно использовать одновременно.

Подробнее здесь: https://stackoverflow.com/questions/792 ... hread-safe
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»