카테고리 없음

[Java] Cipher Class

원스텝퍼더 2022. 11. 14. 19:16

안녕하세요.

어제보다 한걸음더 '원스탭퍼더'입니다.

 

갑자기 Java의 Cipher 라니 뜬금없죠? 암호화 로직을 짜야하는 부분이 생겨서 찾아보다보니 

정리도 할겸 적어보는게 좋겠다고 생각했습니다.

 

처음 코드에 적혀있는 Cipher 클래스를 봤을 땐 , 어지러웠습니다. 뭐가 뭔지를 잘 모르니까요. 

다만 코드에서 key, byte[], AES, padding 을 확인했습니다. 

 

그래도 웹개발 1년이 되었으니 유추는 가능했죠. 뭔가 키값이 있고 , AES는 대표적인 공개키 암호화 방식이고, byte 배열의 자료형을 쓰며 뭔가 더해지는구나 싶었습니다. html 태그 속성중에 padding은 여백을 채워주는 역활을 하고 있으니 그와 비슷할 것이라고 생각했습니다.

 

그리고 구글링을 통해 멋진 포스트를 보곤 3번 읽고 조금은 이해하게 되었습니다.

 

1. 암호화는 키를 통해서도 암호화된 내용을 보고서도 이해가 되면 안된다. 그렇기에 암호화의 방식이 발전을 했는데 그 중에 하나가 AES다.

2. Cipher 클래스를 사용할 때, 비밀키가 16바이트면 AES-128, 32바이트면 AES-256 이다.

3. 바이트 수로 원하는 데이터를 암호화 한다면 무조건 나머지 바이트가 생기는데, 16바이트 형식에 맞추지 않으면 에러가 생기기 때문에 빈 값을 채워주는 것이 padding이다. padding을 채우는 방식은 2가지가 있는데, 단순히 반복을해서 16 혹은 32의 배수로 만들어 주는 방식과 일정한 규칙으로 나머지를 채우는 방식이 있다. 단순히 반복을 해서 채워주는 코드의 경우는 값을 보고 유추가 가능하므로 일정한 규칙으로 채우는 것이 좋다.

 

암호화 하는 안쪽의 복잡한 로직은 아직 모르지만 이정도의 이해로도 암호화 로직을 사용할 수 있을 것 같습니다.