투케이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

 

48. aes 암호화 인코딩, 디코딩 결과 온라인 사이트에서 확인 방법

[설 명] 1. 온라인에서 aes 암호화 인코딩, 디코딩을 수행할 수 있는 방법입니다 [방법 설명] 1. aes 인코...

blog.naver.com


 

반응형
Comments