Безопасен ли поток AwsCrypto?Можем ли мы создать объект AWSCrypto один раз и использовать его для всех запросов? - PullRequest
0 голосов
/ 27 сентября 2019

Можем ли мы создать объект AwsCrypto только один раз и повторно использовать его для всего запроса?В основном я хочу создать KMSClient с AwsCrypto, который можно использовать для шифрования и дешифрования для нескольких CMKs.

Ниже приведен пример кода:

public class KMSClient {

final private AwsCrypto awsCrypto;
final private Map<String, KmsMasterKeyProvider> kmsMasterKeyProviderMap;

public KMSClient(AwsCrypto awsCrypto){
    this.awsCrypto = awsCrypto;
    this.kmsMasterKeyProviderMap = new HashMap<>();
}

public byte[] encrypt(final byte[] data, final String customerManagedKeyId) {
    return awsCrypto.encryptData(getKmsMasterKeyProvider(customerManagedKeyId), data).getResult();
}

public byte[] decrypt(final byte[] data, final String customerManagedKeyId) {
    return awsCrypto.decryptData(getKmsMasterKeyProvider(customerManagedKeyId), data).getResult();
}

private KmsMasterKeyProvider getKmsMasterKeyProvider(final String customerManagedKeyId){
    return kmsMasterKeyProviderMap.computeIfAbsent(customerManagedKeyId,
        k -> KmsMasterKeyProvider.builder().withKeysForEncryption(k).build());
}

1 Ответ

1 голос
/ 28 сентября 2019

AwsCrypto является потокобезопасным, за исключением setEncryptionAlgorithm и setEncryptionFrameSize.Эти два метода безопасны для вызова из нескольких потоков , если каждый поток, использующий этот объект, находится на борту с изменением состояния.Если один поток внесет изменение, а другие не будут к нему готовы, возникнут проблемы.

...