250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- oracle
- JavaScript
- STS
- 문서
- git
- Spring Boot
- ubuntu
- Tomcat
- MySQL
- Docker
- SpringBoot
- Exception
- error
- PostgreSQL
- IntelliJ
- 설정
- Core Java
- Source
- myBatis
- Thymeleaf
- spring
- maven
- jpa
- Eclipse
- 오픈소스
- AJAX
- MSSQL
- JDBC
- Open Source
- Python
Archives
- Today
- Total
헤르메스 LIFE
[암호화] 여러 웹 프로그래밍 언어에서 서로 호환되는 문자열 암호화 클래스 본문
728x90
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 파일에 구현되어 있습니다.
- /*
- * ASP.NET 1.1/2.0 (C#)
- */
- using Hyeongryeol.Security.Cryptography ;
- ...
- const string key = "암호화 비밀키입니다." ;
- const string iv = "초기화 벡터입니다." ;
- // 인스턴스 만들기.
- StringEncrypter encrypter = new StringEncrypter (key, iv) ;
- // 문자열 암호화.
- string encrypted = encrypter.Encrypt ("테스트 문자열") ;
- // 문자열 복호화.
- string decrypted = encrypter.Decrypt (encrypted) ;
/* * ASP.NET 1.1/2.0 (C#) */ using Hyeongryeol.Security.Cryptography ; ... const string key = "암호화 비밀키입니다." ; const string iv = "초기화 벡터입니다." ; // 인스턴스 만들기. StringEncrypter encrypter = new StringEncrypter (key, iv) ; // 문자열 암호화. string encrypted = encrypter.Encrypt ("테스트 문자열") ; // 문자열 복호화. string decrypted = encrypter.Decrypt (encrypted) ;다음 코드는 ASP(VBScript)에서 문자열 암호화 클래스를 사용하는 예제입니다. ASP는 자체적으로 AES 알고리즘을 지원하지 않기 때문에, COM 컴포넌트인 HyeongryeolStringEncrypter.dll 파일을 regsvr32.exe 프로그램으로 먼저 설치해야 합니다. AES 알고리즘은 XySSL 0.8을 기반으로 합니다.
(설치는 %WINDOWS%System32 폴더에 할 것을 권장합니다.)
- '
- ' ASP (VBScript)
- '
- Const conKey = "암호화 비밀키입니다."
- Const conIV = "초기화 벡터입니다."
- ' 인스턴스 만들기.
- Set objEncrypter = Server.CreateObject ("Hyeongryeol.StringEncrypter")
- objEncrypter.Key = conKey
- objEncrypter.InitialVector = conIV
- ' 문자열 암호화.
- strEncrypted = objEncrypter.Encrypt ("테스트 문자열")
- ' 문자열 복호화.
- strDecrypted = objEncrypter.Decrypt (strEncrypted)
' ' ASP (VBScript) ' Const conKey = "암호화 비밀키입니다." Const conIV = "초기화 벡터입니다." ' 인스턴스 만들기. Set objEncrypter = Server.CreateObject ("Hyeongryeol.StringEncrypter") objEncrypter.Key = conKey objEncrypter.InitialVector = conIV ' 문자열 암호화. strEncrypted = objEncrypter.Encrypt ("테스트 문자열") ' 문자열 복호화. strDecrypted = objEncrypter.Decrypt (strEncrypted)다음 코드는 JSP (자바)에서의 예제입니다. StringEncrypter 클래스는 StringEncrypter.java 파일에 구현되어 있습니다. 이 클래스를 사용하려면 Base64Encoder.java 파일도 있어야 합니다.
- /*
- * JSP (Java)
- */
- import com.hyeongryeol.security.cryptography.*;
- ...
- String key = "암호화 비밀키입니다.";
- String iv = "초기화 벡터입니다.";
- // 인스턴스 만들기.
- StringEncrypter encrypter = new StringEncrypter(key, iv);
- // 문자열 암호화.
- String encrypted = encrypter.encrypt("테스트 문자열");
- // 문자열 복호화.
- String decrypted = encrypter.decrypt(encrypted);
/* * JSP (Java) */ import com.hyeongryeol.security.cryptography.*; ... String key = "암호화 비밀키입니다."; String iv = "초기화 벡터입니다."; // 인스턴스 만들기. StringEncrypter encrypter = new StringEncrypter(key, iv); // 문자열 암호화. String encrypted = encrypter.encrypt("테스트 문자열"); // 문자열 복호화. String decrypted = encrypter.decrypt(encrypted);다음 코드는 PHP 5에서의 예제입니다. StringEncrypter 클래스는 StringEncrypter.php 파일에 구현되어 있습니다. 이 클래스는 UTF-8 형식으로 저장된 파일에서만 사용할 수 있습니다. (클래스에서는 UTF-8 인코딩과 디코딩을 하지 않습니다.)
- /*
- * PHP 5 (UTF-8)
- */
- require ("StringEncrypter.php") ;
- define ("KEY", "암호화 비밀키입니다.") ;
- define ("IV", "초기화 벡터입니다.") ;
- // 인스턴스 만들기.
- $encrypter = new StringEncrypter (KEY, IV) ;
- // 문자열 암호화.
- $encrypted = $encrypter->encrypt ("테스트 문자열") ;
- // 문자열 복호화.
- $decrypted = $encrypter->decrypt ($encrypted) ;
/* * PHP 5 (UTF-8) */ require ("StringEncrypter.php") ; define ("KEY", "암호화 비밀키입니다.") ; define ("IV", "초기화 벡터입니다.") ; // 인스턴스 만들기. $encrypter = new StringEncrypter (KEY, IV) ; // 문자열 암호화. $encrypted = $encrypter->encrypt ("테스트 문자열") ; // 문자열 복호화. $decrypted = $encrypter->decrypt ($encrypted) ;
참고자료
728x90
'Core Java' 카테고리의 다른 글
에러, 버그, 예외 (Error, Bug, Exception) (0) | 2011.05.03 |
---|---|
Underscore 와 field 네이밍 컨벤션 (0) | 2011.05.03 |
[Source] String 문자열 | 을 사용하여 split (0) | 2010.12.30 |
[DeveloperWorks] 평범한 Java 도구에 대해 모르고 있던 5가지 사항 (0) | 2010.12.30 |
[Source] 배열값 정렬하기 (0) | 2010.10.20 |