언어/자바

AES256 암호화, 복호화

토킹포테토 2022. 10. 25. 11:11
728x90

1. AES(Advanced Encryption Standard)란?

: 고급 암호화 표준, 대칭키를 쓰는 블럭 암호이다.

크기 라운드 수
128 bit 10
192 bit 12
256 bit 14

 

2. 패딩(Padding)이란?

: 데이터를 특정 크기로 맞추고, 특정 크기보다 부족한 부분의 공간을 의미없는 문자들로 채워 비트수를 맞추는 것.

  블럭 암호화 진행을 위해 패딩 기법이 필요함.

Cipher  cipher = Cipher.getInstance("AES/CNC/PKCS5Padding");

 

3.  AES256 암호화

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;

public String encrypt(String text) throws Exception{
	String alg = "AES/CBC/PKCS5Padding";
    String key = "32bit Secrety Key"; //32bit 비밀키
    String iv = "initial vector"; //16bit 초기화 백터
    String enStr="";
    
    try{
    //비밀키와 초기화 백터를 공유받았는데 base64로 인코딩되어있을 시, 디코딩을 해야한다.
    byte[] keyByte = Base64.decodeBase64(key.getByte());
    byte[] ivByte = Base64.decodeBase64(iv.getByte());
    
    //암호화 시작
    SecretKeySpec keySpec = new SecretKeySpec(keyByte, "AES");
    IvParameterSpec ivParamSpec = new IvParameterSpec(ivByte);
    
    Cipher cipher = Ciipher.getInstance(alg);
    cipher.init(Cipher.ENCRYPT_MODE , keySpec, ivParamSpec);
    
    btye[] encrypted = cipher.doFinal(text.getBytes("UTF-8"));
    
    //AES256 으로 암호화 후 BASE64로 인코딩
    EnStr = new String(Base64.encodeBase64(encrypted));
    
    }catch(Exception e){
    System.out.println("오류가 발생했습니다 : " + e.getMessage());
    e.printStackTrace();
    }
    
    return enStr;

}

 

4. AES256 복호화

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;

public String decrypt(String text) throws Exception {
     String alg = "AES/CBC/PKCS5Padding";
     String key = "32bit Secrety Key"; //32bit 비밀키
     String iv = "initial vector"; //16bit 초기화 백터
     String deStr="";

     try{
    //비밀키와 초기화 백터를 공유받았는데 base64로 인코딩되어있을 시, 디코딩을 해야한다.
     byte[] keyByte = Base64.decodeBase64(key.getBytes());
     byte[] ivByte = Base64.decodeBase64(iv.getBytes());

        //decodeing
        SecretKeySpec keySpec = new SecretKeySpec(keyByte, "AES");
        IvParameterSpec ivParamSpec = new IvParameterSpec(ivByte);

        Cipher cipher = Cipher.getInstance(alg);
        cipher.init(Cipher.DECRYPT_MODE, keySpec, ivParamSpec);

        byte[] decodedBytes = Base64.decodeBase64(text.getBytes("UTF-8"));
        byte[] decrypted = cipher.doFinal(decodedBytes);

        deStr = new String(decrypted);

     }catch(Exception e ){
         System.out.println("오류가 발생했습니다 : "+e.getMessage());
         e.printStackTrace();
     }	     
        return deStr;
    }

 

'언어 > 자바' 카테고리의 다른 글

[JAVA IO]FileInputStream & FileOutputStream  (0) 2023.03.09
쿠키(Cookie)와 세션(Session)  (0) 2022.11.22
자바 특수 문자, 정규식 처리  (0) 2022.10.24
JSON 이란?  (0) 2022.10.24
API 연동(1)_ 토큰발급  (0) 2022.10.21