Notice
Recent Posts
Recent Comments
Link
투케이2K
177. (AndroidStudio/android/java) aes 128 , aes 256 비밀키 사용해 데이터 인코딩 (encode) 및 디코딩 (decode) 수행 실시 본문
Android
177. (AndroidStudio/android/java) aes 128 , aes 256 비밀키 사용해 데이터 인코딩 (encode) 및 디코딩 (decode) 수행 실시
투케이2K 2021. 7. 27. 13:39[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : java
[aes128 인코딩, 디코딩 소스 코드]
/** ======= [aes128 비밀키 전역 변수 선언 실시] ======= **/
public static String aes128SecretKey = "0123456789abcdef"; //TODO [aes128 = 16 byte / aes192 = 24 byte / aes256 = 32 byte]
public static byte[] aes128ivBytes = new byte[16]; // TODO [일반 사용 방식]
//public static byte[] aes128ivBytes = "0123456789abcdef".getBytes(); // TODO [16 byte Enter IV (Optional) 지정 방식]
String aes128EncodeData = "";
String aes128DecodeData = "";
/** ======= [aes128 비밀키 사용해 인코딩 수행] ======= **/
public static String getAES128encode(String encodeData) {
String result = "";
try {
Log.d("---", "---");
Log.w("//===========//", "================================================");
Log.d("", "\n" + "[A_Test_Java > getAES128encode() 메소드 : aes128 비밀키 사용해 인코딩 수행 실시]");
Log.d("", "\n" + "[secretKey : "+String.valueOf(aes128SecretKey)+"]");
Log.d("", "\n" + "[encodeData : "+String.valueOf(encodeData)+"]");
Log.w("//===========//", "================================================");
Log.d("---", "---");
byte[] textBytes = encodeData.getBytes("UTF-8");
AlgorithmParameterSpec ivSpec = new IvParameterSpec(aes128ivBytes);
SecretKeySpec newKey = new SecretKeySpec(aes128SecretKey.getBytes("UTF-8"), "AES");
Cipher cipher = null;
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, newKey, ivSpec);
Log.d("---", "---");
Log.w("//===========//", "================================================");
Log.d("", "\n" + "[A_Test_Java > getAES128encode() 메소드 : aes128 비밀키 사용해 인코딩 수행 결과]");
Log.d("", "\n" + "[secretKey : "+String.valueOf(aes128SecretKey)+"]");
Log.d("", "\n" + "[결과 : "+String.valueOf(Base64.encodeToString(cipher.doFinal(textBytes), Base64.DEFAULT))+"]");
Log.w("//===========//", "================================================");
Log.d("---", "---");
// TODO [리턴 데이터 반환 실시]
return Base64.encodeToString(cipher.doFinal(textBytes), Base64.DEFAULT);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/** ======= [aes128 비밀키 사용해 디코딩 수행] ======= **/
public static String getAES128decode(String decodeData) {
String result = "";
try {
Log.d("---", "---");
Log.e("//===========//", "================================================");
Log.d("", "\n" + "[A_Test_Java > getAES128decode() 메소드 : aes128 비밀키 사용해 디코딩 수행 실시]");
Log.d("", "\n" + "[secretKey : "+String.valueOf(aes128SecretKey)+"]");
Log.d("", "\n" + "[decodeData : "+String.valueOf(decodeData)+"]");
Log.e("//===========//", "================================================");
Log.d("---", "---");
// TODO [인풋으로 들어온 base64 문자열 데이터를 가지고 디코딩 수행 실시]
byte[] textBytes = Base64.decode(decodeData, Base64.DEFAULT);
AlgorithmParameterSpec ivSpec = new IvParameterSpec(aes128ivBytes);
SecretKeySpec newKey = new SecretKeySpec(aes128SecretKey.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, newKey, ivSpec);
Log.d("---", "---");
Log.e("//===========//", "================================================");
Log.d("", "\n" + "[A_Test_Java > getAES128decode() 메소드 : aes128 비밀키 사용해 디코딩 수행 결과]");
Log.d("", "\n" + "[secretKey : "+String.valueOf(aes128SecretKey)+"]");
Log.d("", "\n" + "[결과 : "+String.valueOf(new String(cipher.doFinal(textBytes), "UTF-8"))+"]");
Log.e("//===========//", "================================================");
Log.d("---", "---");
// TODO [리턴 데이터 반환 실시]
return new String(cipher.doFinal(textBytes), "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
[aes256 인코딩, 디코딩 소스 코드]
/** ======= [aes256 비밀키 전역 변수 선언 실시] ======= **/
public static String aes256SecretKey = "0123456789abcdef0123456789abcdef"; //TODO [aes128 = 16 byte / aes192 = 24 byte / aes256 = 32 byte]
public static byte[] aes256ivBytes = new byte[16]; // TODO [일반 사용 방식]
//public static byte[] aes256ivBytes = "0123456789abcdef".getBytes(); // TODO [16 byte Enter IV (Optional) 지정 방식]
String aes256EncodeData = "";
String aes256DecodeData = "";
/** ======= [aes256 비밀키 사용해 인코딩 수행] ======= **/
public static String getAES256encode(String encodeData) {
String result = "";
try {
Log.d("---", "---");
Log.w("//===========//", "================================================");
Log.d("", "\n" + "[A_Test_Java > getAES256encode() 메소드 : aes256 비밀키 사용해 인코딩 수행 실시]");
Log.d("", "\n" + "[secretKey : "+String.valueOf(aes256SecretKey)+"]");
Log.d("", "\n" + "[encodeData : "+String.valueOf(encodeData)+"]");
Log.w("//===========//", "================================================");
Log.d("---", "---");
byte[] textBytes = encodeData.getBytes("UTF-8");
AlgorithmParameterSpec ivSpec = new IvParameterSpec(aes256ivBytes);
SecretKeySpec newKey = new SecretKeySpec(aes256SecretKey.getBytes("UTF-8"), "AES");
Cipher cipher = null;
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, newKey, ivSpec);
Log.d("---", "---");
Log.w("//===========//", "================================================");
Log.d("", "\n" + "[A_Test_Java > getAES128encode() 메소드 : aes256 비밀키 사용해 인코딩 수행 결과]");
Log.d("", "\n" + "[secretKey : "+String.valueOf(aes256SecretKey)+"]");
Log.d("", "\n" + "[결과 : "+String.valueOf(Base64.encodeToString(cipher.doFinal(textBytes), Base64.DEFAULT))+"]");
Log.w("//===========//", "================================================");
Log.d("---", "---");
// TODO [리턴 데이터 반환 실시]
return Base64.encodeToString(cipher.doFinal(textBytes), Base64.DEFAULT);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/** ======= [aes256 비밀키 사용해 디코딩 수행] ======= **/
public static String getAES256decode(String decodeData) {
String result = "";
try {
Log.d("---", "---");
Log.e("//===========//", "================================================");
Log.d("", "\n" + "[A_Test_Java > getAES256decode() 메소드 : aes256 비밀키 사용해 디코딩 수행 실시]");
Log.d("", "\n" + "[secretKey : "+String.valueOf(aes256SecretKey)+"]");
Log.d("", "\n" + "[decodeData : "+String.valueOf(decodeData)+"]");
Log.e("//===========//", "================================================");
Log.d("---", "---");
// TODO [인풋으로 들어온 base64 문자열 데이터를 가지고 디코딩 수행 실시]
byte[] textBytes = Base64.decode(decodeData, Base64.DEFAULT);
AlgorithmParameterSpec ivSpec = new IvParameterSpec(aes256ivBytes);
SecretKeySpec newKey = new SecretKeySpec(aes256SecretKey.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, newKey, ivSpec);
Log.d("---", "---");
Log.e("//===========//", "================================================");
Log.d("", "\n" + "[A_Test_Java > getAES256decode() 메소드 : aes256 비밀키 사용해 디코딩 수행 결과]");
Log.d("", "\n" + "[secretKey : "+String.valueOf(aes256SecretKey)+"]");
Log.d("", "\n" + "[결과 : "+String.valueOf(new String(cipher.doFinal(textBytes), "UTF-8"))+"]");
Log.e("//===========//", "================================================");
Log.d("---", "---");
// TODO [리턴 데이터 반환 실시]
return new String(cipher.doFinal(textBytes), "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
[aes128 인코딩, 디코딩 결과 출력]
[aes256 인코딩, 디코딩 결과 출력]
[aes 인코딩, 디코딩 결과 참고 사이트]
https://blog.naver.com/kkh0977/222447254921
반응형
'Android' 카테고리의 다른 글
Comments