헤르메스 LIFE

[암호화] 여러 웹 프로그래밍 언어에서 서로 호환되는 문자열 암호화 클래스 본문

Core Java

[암호화] 여러 웹 프로그래밍 언어에서 서로 호환되는 문자열 암호화 클래스

헤르메스의날개 2011. 1. 25. 18:00
728x90

원문 : http://blog.ryeol.com/7


ASP, ASP.NET 1.1/2.0, JSP, PHP 5 에서 사용할 수 있는 문자열 암호화 클래스를 만들어 봤습니다. 이 클래스들은 서로 호환되기 때문에 ASP에서 암호화한 문자열을 ASP.NET 에서 복호화하는 식으로 사용이 가능합니다. 이 클래스는 초기화 벡터는 문자열로 입력받습니다. 내부적으로 키와 초기화 벡터는 UTF-8으로 변환된 후, MD5로 해시됩니다.
키와 초기화 벡터의 변화

문자열 암호화는 Encrypt 메서드에서 수행합니다. 이 메서드는 먼저 입력 문자열을 UTF-8으로 변환한 후, PKCS7 패딩을 덧붙입니다. (JSP 버전에서는 PKCS5를 사용하지만, 블록 크기가 128비트일 경우에는 서로 호환됩니다.) 그 다음에 128-bit AES 알고리즘을 사용하여 CBC 모드로 암호화합니다. 암호화된 이진 데이터는 베이스64로 인코딩됩니다.
문자열 복호화에는 Decrypt 메서드를 사용합니다.
입력과 출력의 변화

다음 코드는 ASP.NET 1.1/2.0(C#)에서 문자열 암호화 클래스를 사용하는 예제입니다. StringEncrypter 클래스는 StringEncrypter.cs 파일에 구현되어 있습니다.
  1. /*  
  2.  *  ASP.NET 1.1/2.0 (C#)  
  3.  */  
  4. using Hyeongryeol.Security.Cryptography ;   
  5. ...   
  6. const string key = "암호화 비밀키입니다." ;   
  7. const string iv = "초기화 벡터입니다." ;   
  8.   
  9. // 인스턴스 만들기.   
  10. StringEncrypter encrypter = new StringEncrypter (key, iv) ;   
  11.   
  12. // 문자열 암호화.   
  13. string encrypted = encrypter.Encrypt ("테스트 문자열") ;   
  14.   
  15. // 문자열 복호화.   
  16. string decrypted = encrypter.Decrypt (encrypted) ;  
다음 코드는 ASP(VBScript)에서 문자열 암호화 클래스를 사용하는 예제입니다. ASP는 자체적으로 AES 알고리즘을 지원하지 않기 때문에, COM 컴포넌트인 HyeongryeolStringEncrypter.dll 파일을 regsvr32.exe 프로그램으로 먼저 설치해야 합니다. AES 알고리즘은 XySSL 0.8을 기반으로 합니다.
(설치는 %WINDOWS%System32 폴더에 할 것을 권장합니다.)
  1.   
  2. '  ASP (VBScript)   
  3.   
  4. Const conKey = "암호화 비밀키입니다."  
  5. Const conIV = "초기화 벡터입니다."  
  6.   
  7. ' 인스턴스 만들기.   
  8. Set objEncrypter = Server.CreateObject ("Hyeongryeol.StringEncrypter")   
  9.   
  10. objEncrypter.Key = conKey   
  11. objEncrypter.InitialVector = conIV   
  12.   
  13. ' 문자열 암호화.   
  14. strEncrypted = objEncrypter.Encrypt ("테스트 문자열")   
  15.   
  16. ' 문자열 복호화.   
  17. strDecrypted = objEncrypter.Decrypt (strEncrypted)  
다음 코드는 JSP (자바)에서의 예제입니다. StringEncrypter 클래스는 StringEncrypter.java 파일에 구현되어 있습니다. 이 클래스를 사용하려면 Base64Encoder.java 파일도 있어야 합니다.
  1. /*  
  2.  *  JSP (Java)  
  3.  */  
  4. import com.hyeongryeol.security.cryptography.*;   
  5. ...   
  6. String key = "암호화 비밀키입니다.";   
  7. String iv = "초기화 벡터입니다.";   
  8.   
  9. // 인스턴스 만들기.   
  10. StringEncrypter encrypter = new StringEncrypter(key, iv);   
  11.   
  12. // 문자열 암호화.   
  13. String encrypted = encrypter.encrypt("테스트 문자열");   
  14.   
  15. // 문자열 복호화.   
  16. String decrypted = encrypter.decrypt(encrypted);  
다음 코드는 PHP 5에서의 예제입니다. StringEncrypter 클래스는 StringEncrypter.php 파일에 구현되어 있습니다. 이 클래스는 UTF-8 형식으로 저장된 파일에서만 사용할 수 있습니다. (클래스에서는 UTF-8 인코딩과 디코딩을 하지 않습니다.)
  1. /*  
  2.  *  PHP 5 (UTF-8)  
  3.  */  
  4. require ("StringEncrypter.php") ;   
  5.   
  6. define ("KEY""암호화 비밀키입니다.") ;   
  7. define ("IV""초기화 벡터입니다.") ;   
  8.   
  9. // 인스턴스 만들기.   
  10. $encrypter = new StringEncrypter (KEY, IV) ;   
  11.   
  12. // 문자열 암호화.   
  13. $encrypted = $encrypter->encrypt ("테스트 문자열") ;   
  14.   
  15. // 문자열 복호화.   
  16. $decrypted = $encrypter->decrypt ($encrypted) ;  

참고자료
728x90