Notice
Recent Posts
Recent Comments
Link
투케이2K
963. (Android/Java) [유틸 파일] getAwsKmsDecode - Aws KMS 데이터 복호화 수행 - Aws Kms Data Decode 본문
Android
963. (Android/Java) [유틸 파일] getAwsKmsDecode - Aws KMS 데이터 복호화 수행 - Aws Kms Data Decode
투케이2K 2025. 3. 18. 19:56[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : Java / Kotlin

[소스 코드]
// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------
- 언어 : Java / Kotlin
- 개발 툴 : AndroidStudio
- 기술 구분 : Aws / KMS / AWSKMSClient
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[사전) 필요 설정 정리] : build.gradle 의존성 부여
// --------------------------------------------------------------------------------------
// [AWS] : [target 31 이상 의존성]
implementation 'com.amazonaws:aws-android-sdk-kms:2.57.0'
implementation 'com.amazonaws:aws-android-sdk-s3:2.57.0'
implementation 'com.amazonaws:aws-android-sdk-iot:2.57.0'
implementation 'com.amazonaws:aws-android-sdk-mobile-client:2.57.0'
// [AWS] : [target 31 미만 의존성]
implementation 'com.amazonaws:aws-android-sdk-kms:2.16.13'
implementation 'com.amazonaws:aws-android-sdk-s3:2.16.13'
implementation 'com.amazonaws:aws-android-sdk-iot:2.16.13'
implementation 'com.amazonaws:aws-android-sdk-mobile-client:2.16.13'
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[사전) AWSKMSClient 초기화 방법
// --------------------------------------------------------------------------------------
https://blog.naver.com/kkh0977/223799656979
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[Java : 소스 코드]
// --------------------------------------------------------------------------------------
public Observable<String> getAwsKmsDecode(String keyArn, String data) {
S_Log._D_(ACTIVITY_NAME + " :: getAwsKmsDecode :: AWS KMS 데이터 복호화 수행", new String[]{"keyArn :: " + String.valueOf(keyArn), "data :: " + String.valueOf(data)});
return Observable.create(subscriber -> {
try {
if (kmsClient != null){
new Thread(() -> {
if (C_Util.stringNotNull(keyArn) == true
&& C_Util.stringNotNull(data) == true){ // [파라미터 null 체크 수행]
// TODO [Base64 디코딩 To Byte Array]
byte[] array = null;
try {
array = Base64.decode(data, 0);
}
catch (Exception eq){
S_Log._printStackTrace_(null, S_FinalData.LOG_BUG_STATE, null, eq);
}
if (array != null){ // TODO [Array 널 체크]
ByteBuffer buffer = ByteBuffer.wrap(array);
// TODO [KMS 디코딩 수행 실시]
DecryptRequest decryptRequest = new DecryptRequest()
.withCiphertextBlob(buffer);
DecryptResult decryptResult = kmsClient.decrypt(decryptRequest);
ByteBuffer decryptedData = decryptResult.getPlaintext();
// TODO [원본 문자열 확인]
String returnData = new String(decryptedData.array(), StandardCharsets.UTF_8);
S_Log._W_(ACTIVITY_NAME + " :: getAwsKmsDecode :: AWS KMS 데이터 복호화 성공", new String[]{returnData});
if (subscriber != null && subscriber.isDisposed() == false){
subscriber.onNext(returnData);
subscriber.onComplete();
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: getAwsKmsDecode :: AWS KMS 데이터 복호화 에러", new String[]{"Error :: Base64 to Byte Array Convert"});
if (subscriber != null && subscriber.isDisposed() == false){
subscriber.onError(new Throwable("[Error] : Base64 to Byte Array Convert"));
subscriber.onComplete();
}
}
}
else {
S_Log._E_(ACTIVITY_NAME + " :: getAwsKmsDecode :: AWS KMS 데이터 복호화 에러", new String[]{"Error :: Input Data Is Null"});
if (subscriber != null && subscriber.isDisposed() == false){
subscriber.onError(new Throwable("[Error] : Input Data Is Null"));
subscriber.onComplete();
}
}
}).start();
}
else {
S_Log._E_(ACTIVITY_NAME + " :: getAwsKmsDecode :: AWS KMS 데이터 복호화 에러", new String[]{"Error :: kmsClient is null"});
if (subscriber != null && subscriber.isDisposed() == false){
subscriber.onError(new Throwable("[Error] : kmsClient is null"));
subscriber.onComplete();
}
}
} catch (final Exception e){
S_Log._printStackTrace_(null, S_FinalData.LOG_BUG_STATE, null, e);
try {
if (subscriber != null && subscriber.isDisposed() == false){
subscriber.onError(new Throwable("[Exception] : " + String.valueOf(e.getMessage())));
subscriber.onComplete();
}
}
catch (Exception ex){
ex.printStackTrace();
}
}
});
}
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
[Aws KMS 키 관리 서비스 개념 및 설명 정리 - 데이터 암호화 키 생성 관리]
https://blog.naver.com/kkh0977/223793790135?trackingCode=blog_bloghome_searchlist
[AccessKey , SecretKey 사용해 Aws KMS 키 관리 서비스 AWSKMSClient 초기화 방법]
https://blog.naver.com/kkh0977/223799656979
// --------------------------------------------------------------------------------------
반응형
'Android' 카테고리의 다른 글
Comments