Language/Java

Java 기반의 AES 복호화 프로그램

공부좀하시졍 2020. 4. 18. 22:08
import java.util.Base64;
import javax.crypto.*;
import javax.crypto.spec.*;

public class Security_HW2 {
	static String key = "8iE3bf1se6N76HGPP8S0Xw=="; 
	static String iv = "cHml3oX848/0uBwDJtChOA=="; 
	static byte[] decKey = Base64.getDecoder().decode(key); //디코딩된 key
	static byte[] decIv = Base64.getDecoder().decode(iv); //디코딩된 iv
	
	 public static String decode(String str) throws Exception {

		  SecretKey secretKey = new SecretKeySpec(decKey, "AES"); //key 만들기
		   
	      Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); //cipher 만들기
	      cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(decIv)); //초기화
	      byte[] decoding = Base64.getDecoder().decode(str.getBytes());
	      
	      return new String(cipher.doFinal(decoding),"UTF-8");
	   }
	   
	public static void main(String[] args) throws Exception{
		String cipherText="QDr9NZNG9Bgc3TTnfRuqjjzf/kVSYwbP7F9mR4GQZ/IneIh7HTc/xnwzEeVBcH3pPlIbLFySKZruedJc9X87CGNDJ1f2Dat8BR3Ypbei5Q42xc306/AkSuGsjfqbX9/ELxmdKn7MyvY/Jbc0v0AJHV6odgNzygKRRrFJcUIF/50=";
	    System.out.println("AES 복호화:"+"\n"+decode(cipherText));

	}

}

 


base64 디코딩한 결과를 문자열로 출력하면 아스키코드로 표현할 수 없는 바이트 같은 경우 제대로 표현이 안될 수 있기 때문에 string형태와 byte형태를 잘 구분해서 코딩을 해야한다.

삽질을 몇시간 했는지,,ㅠㅠ