C#으로 PBEWithMD5AndDES 암복호화하기

자바 프로젝트에서 properties 파일에 있는 DB 계정 정보를 암호화하기 위해 Jasypt 라이브러리를 많이 사용합니다. (Jasypt 라이브러리를 잘 모르시거나 사용법이 궁금하신 분은 구글링 해보시기 바랍니다.)

Jasypt 라이브러리를 이용할 때 주로 사용하는 알고리즘은 PBEWithMD5AndDES라는 것입니다. 문자를 그대로 풀어 보면 “MD5와 DES를 이용한 패스워드 기반 암호화” 정도로 해석될 수 있겠네요. 일반적으로 취약하다고 알려져 있는 MD5와 DES 알고리즘을 사용한다는 것이 조금 꺼림칙하지만 다들 많이 쓴다길래 고민하지 않고 사용하기로 했습니다.

그런데 Jasypt 라이브러리로 암호화한 properties 파일을 외부 C# 프로그램을 통해 변경할 일이 생겼습니다. 우선 “PBEWithMD5AndDES C#”으로 구글링을 해보았습니다. 가장 첫 번째로 검색되는 링크는 2006년에 Code Project에 업로드 된 코드입니다. 그리고 나머지 검색 결과는 이 Code Project 코드를 참고하여 사용하거나 질문하는 내용들이었습니다.

13년이나 되었지만 가장 많이 참조되고 있는 2006년 코드를 살펴 보았습니다. 이 코드를 활용하자니 keyString, salt, md5Iterations, segments라는 파라미터가 필요했습니다. keyString은 Jasypt에서 입력한 password니까 알고 있는 값이고 나머지 3개는 어디서 나온 건지 궁금했습니다. Jasypt API 문서와 StackOverflow를 뒤적거리는 삽질 끝에 md5Iterations=1000, segments=1이고 salt는 암호화된 문자열의 첫 8 바이트에 들어 있다는 것을 알게 되었습니다.

수많은 삽질을 통해 알게 된 정보를 다듬고 축약하여 작성한 예제 코드를 Github에 올려두었습니다.

https://github.com/bigbossdev/crypto-example

다른 분들은 저처럼 많이 삽질하지 않았으면 좋겠습니다. 우리 모두의 시간은 소중하니까요~ :)

5 Replies to “C#으로 PBEWithMD5AndDES 암복호화하기”

  1. 덕분에 문제 해결하였습니다 ㅠㅠㅠ 이것때문에 몇일을 고생했는데 정말 감사드립니다

Leave a Reply

Your email address will not be published. Required fields are marked *