본문으로 바로가기

AES256 암호화, 복호화 주의사항 및 샘플 코드

category IT/C# 2018.10.11 09:09


VB6으로 AES256 암호화를 하다가 보니 다른 언어로 개발된 프로그램과 통신할때 이런 저런

문제가 많이 나오네요.

그래서 발생했던 문제점 관련하여 내용을 정리해 보았습니다.


AES256 암호화시 중요 체크포인트

1. 암호화에 사용되는 키

2. 암호화에 사용되는 주요키 말고 IV라고 하는 키가 하나 더 있음

3. ChainingMode의 종류가 ECB, CBC, GCM 등 여러개가 있음


서로 다른 언어로 개발하여 암호화된 값을 프로토콜 전달하는 경우에는 

위에 3가지가 맞아야합니다. 

단 하나라도 틀리면 암호화되어 나온 결과값이 달라지게 됩니다.

그렇기 때문에 복호화를 해도 전혀 엉뚱한 값이 나오게 되고, 

암호화된 값을 주고 받는 양쪽의 프로그램에서 같은 결과를 기대할 수 없게됩니다.

프로그램을 개발하실때 주의 하시기 바랍니다.



[C# AES256 암호화/복호화 샘플 코드 - ChainingModeCBC]

<참조링크> 

c#에서는 CipherMode.CBC 라고 하네요. 표현방식이 다른듯합니다.


[JAVA AES256 암호화/복호화 샘플 코드 - ChainingModeCBC]

<참조링크>

자바의 패딩모드는 PKCS5 이고, C#의 PaddingMode는 PKCS7인데

PKCS5나 PKCS7이나 서로 호환이 되는것 같습니다. 

동일한 결과가 나오는 걸 제가 직접 확인했습니다.


[VB6 AES256 암호화/복호화 샘플 코드 - ChainingModeECB]

<참조링크>

심플하게 잘 되어 있는 코드지만 단점이 하나 있다면, CBC 체이닝모드를 지원하지 않는다는 점입니다.

VB6에서 CBC 모드를 지원하는 샘플코드는 본적이 없고, 

유료 DLL에서는 지원한다고 하는데, 역시나 유료로는 쓸 생각이 없기 때문에 찾다가 포기했습니다.