RyeolStringHasher.zip

소스 관리의 편의 문제로 현재 주석은 영어로 작성되어 있습니다.

간단한 문자열 해시 라이브러리입니다. COM (32/64 비트) 과 C# 으로 구현되어 있습니다.

입력 문자열은 UTF-8 으로 변환된 후 MD5SHA2-256 과 같은 해시 알고리즘으로 해시됩니다. 해시된 바이너리는 Base64로 인코딩됩니다.

다음은 C# 버전 StringHasher 를 사용하는 예제입니다. StringHasher 클래스는 StringHasher.cs 파일에 구현되어 있습니다.

/*
 *  C#
 */
using Ryeol.Security.Cryptography;
...

// 인스턴스 만들기.
StringHasher hasher = new StringHasher();

// 해시 알고리즘 설정.
// MD5, SHA1, SHA2-256, SHA2-384, SHA2-512 가 지원됩니다.
hasher.Algorithm = StringHasherAlgorithm.SHA2_256;

// 문자열 해시
string hashed = hasher.Compute("Test sample");


다음 코드는 ASP(VBScript) 에서 StringHasher 를 사용하는 모습입니다. ASP 는 자체적으로 해시를 지원하지 않기 때문에 XySSL 0.8 기반의 COM 인 RyeolStringHasher.dll 파일을 설치해야 합니다.
(Visual Studio 2012 용 Visual C++ 재배포 가능 패키지도 설치해야 합니다.)

'
'  ASP (VBScript)
' 
' 인스턴스 만들기.
Set objHasher = Server.CreateObject("Ryeol.StringHasher")

' 해시 알고리즘 설정.
' MD2, MD4, MD5, SHA1, SHA2-224, SHA2-256, SHA2-384, SHA2-512 가 지원됩니다.
objHasher.Algorithm = "SHA2-256"

' 문자열 해시
strHashed = objHasher.Compute("Test sample")



릴리즈 노트

2013년 6월 7일
Windows XP 지원을 위해 StringHasher.cs 에서 해시 구현 생성 시 Create 메서드를 사용하도록 수정되었습니다.

2012년 12월 10일
최초 배포

YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST


  RyeolStringEncrypter.zip
소스 관리의 편의 문제로 현재 주석은 영문으로 작성되어 있습니다. 

예전에 작성했던 StringEncrypterAES-256 암호화 기능을 추가한 새로운 버전을 만들어 봤습니다. 현재는 COM dll (32/64 비트)과 C# 클래스만 지원하며, PHP자바는 지원하지 않습니다.

StringEncrypter 는 초기화 벡터를 문자열로 입력받습니다. AES 는 키에 문자열을 사용할 수 없기 때문에, 키 문자열을 UTF-8 으로 변환한 후 MD5 또는 SHA2-256 으로 해시합니다.

마찬가지로 초기화 벡터 문자열 역시 AES 에 바로 사용할 수 없기 때문에 MD5 로 해시됩니다.

입력 문자열은 UTF-8 으로 변환된 후 CBC 모드와 PKCS7 패딩을 사용하는 128 비트 또는 256 비트 AES로 암호화됩니다. AES 키 크기는 키 문자열을 해시하는데 사용된 해시 알고리즘의 크기에 따라 결정됩니다. 예를 들어 키 해시 알고리즘이 SHA2-256 이면, 256 비트 AES 암호화가 사용됩니다. 암호화된 바이너리는 Base64로 인코딩됩니다.

다음은 C# 버전 StringEncrypter 를 사용하는 예제입니다. StringEncrypter 클래스는 StringEncrypter.cs 파일에 구현되어 있습니다.

/*
 *  C#
 */
using Ryeol.Security.Cryptography;
...
const string key = "암호화 비밀키입니다.";
const string iv = "초기화 벡터입니다.";

// 인스턴스 만들기
StringEncrypter encrypter = new StringEncrypter(key, iv);

// 키 해시 알고리즘 설정. MD5 와 SHA2-256 을 지원합니다.
// 아래 코드는 해시 크기가 256 비트이기 때문에, AES-256 이 사용됩니다.
encrypter.KeyHashAlgorithm = StringEncrypterKeyHashAlgorithm.SHA2_256;

// 문자열 암호화
string encrypted = encrypter.Encrypt("테스트 문자열");

// 문자열 복호화
string decrypted = encrypter.Decrypt(encrypted);


다음 코드는 ASP(VBScript) 에서 StringEncrypter 를 사용하는 모습입니다. ASP 는 자체적으로 AES 를 지원하지 않기 때문에 XySSL 0.8 기반의 COM 인 RyeolStringEncrypter.dll 파일을 설치해야 합니다.
(Visual Studio 2012 용 Visual C++ 재배포 가능 패키지도 설치해야 합니다.)

'
'  ASP (VBScript)
' 
Const conKey = "암호화 비밀키입니다."
Const conIV = "초기화 벡터입니다."

' 인스턴스 만들기
Set objEncrypter = Server.CreateObject("Ryeol.StringEncrypter")

objEncrypter.Key = conKey
objEncrypter.IV = conIV

' 키 해시 알고리즘 설정. MD5 와 SHA2-256 을 지원합니다.
' 아래 코드는 해시 크기가 256 비트이기 때문에, AES-256 이 사용됩니다.
objEncrypter.KeyHashAlgorithm = "SHA2-256"

' 문자열 암호화
strEncrypted = objEncrypter.Encrypt("테스트 문자열")

' 문자열 복호화
strDecrypted = objEncrypter.Decrypt(strEncrypted)



릴리즈 노트

2013년 6월 7일
Windows XP 지원을 위해 StringEncrypter.cs 에서 해시 구현 생성 시 Create 메서드를 사용하도록 수정되었습니다.

2012년 12월 10일
최초 배포
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. 임성진 2013.03.21 10:40  댓글주소  수정/삭제  댓글쓰기

    해당 모듈은 서버에 닷넷 프레임 워크가 설치가 되어있어야 하나요?

    그리고 AES-256로 세팅하려면

    objEncrypter.KeyHashAlgorithm = "AES-256"

    이렇게 세팅하면 될까요?

    웹에서는 Base64로 인코딩 되면 자바 스크립트에서 다른게 인코딩한다고 하더라고요

    혹시 hex값으로 리턴하는 함수 구현에 대해서 말씀해주실 수 있을까요?

    • Favicon of https://blog.ryeol.com BlogIcon ryeol 2013.03.21 19:55 신고  댓글주소  수정/삭제

      안녕하세요. ^^

      C# 버전은 닷넷 프레임워크가 필요하지만 COM 버전 DLL 은 필요하지 않습니다.

      AES-256 으로 설정하시려면

      objEncrypter.KeyHashAlgorithm = "SHA2-256"

      이렇게 하시면 됩니다.

      HEX 출력은 현재 계획하고 있지 않습니다.

  2. 2013.05.12 02:20  댓글주소  수정/삭제  댓글쓰기

    모듈 "C:\Users\user\Desktop\RyeolStringEncrypter.dll" 을(를) 로드하지 못했습니다.
    바이너리가 지정된 경로에 저장되었는지 확인하거나 디버그하여 바이너리 또는 종속 .DLL 파일에 문제가 있는지 확인하십시오. 지정된 모듈을 찾을 수 없습니다.

    이런 오류가 뜨면서 dll 이 regsvr32 로 등록이 안되는데 어떻게 해야 하나요?

    • 아하 2013.05.12 02:47  댓글주소  수정/삭제

      아 재배포 패키지를 설치하니깐 되네요;;ㅎ
      그런데 텍스트 말고 특정한 파일 암호화 같은건 안되나요?

    • 2013.05.12 03:00  댓글주소  수정/삭제

      그리고 초기화 벡터가 뭔가요???

    • Favicon of https://blog.ryeol.com BlogIcon ryeol 2013.05.13 00:42 신고  댓글주소  수정/삭제

      안녕하세요. ^^

      파일 암호화는 지원하지 않습니다.

      초기화벡터(Initialization vector) 는 난수화(Randomization) 을 높이기 위해 사용하는 값입니다.

      같은 비밀키로 여러 번 암호화할 경우 패턴이 노출되는 것을 방지할 목적으로 임의 생성된 초기화벡터를 사용하여 암호화를 한 후 초기화벡터와 암호문을 같이 전송하는 것입니다.

  3. 도와주세요 2013.09.08 09:32  댓글주소  수정/삭제  댓글쓰기

    64비트 Dll을 만드려고 여기저기 찾아보다가

    http://blog.daum.net/buruss/6441346

    위의 사이트를 보고 설정했는데요..

    위의 사이트를 보고 설정했는데요..

    32비트로 빌드하면 잘 되는데 이상하게 64비트로 설정하고 빌드하니까 링크하는데서 오류가 나는데 어떻게 64비트 Dll을 만드신 건가요??

    사용중인 OS 는 Win7 64비트입니다.



    1>------ 빌드 시작: 프로젝트: Test, 구성: Release x64 ------
    1>KeyLog.obj : error LNK2001: unresolved external symbol __security_check_cookie
    1>KeyLog.obj : error LNK2001: unresolved external symbol __imp_CreateFileA
    1>KeyLog.obj : error LNK2001: unresolved external symbol __imp_SetFilePointer
    1>KeyLog.obj : error LNK2001: unresolved external symbol __imp_WriteFile
    1>KeyLog.obj : error LNK2001: unresolved external symbol __imp_MapVirtualKeyExA
    1>KeyLog.obj : error LNK2001: unresolved external symbol __imp_GetAsyncKeyState
    1>KeyLog.obj : error LNK2001: unresolved external symbol __imp_GetKeyboardLayout
    1>KeyLog.obj : error LNK2001: unresolved external symbol __imp_DisableThreadLibraryCalls
    1>KeyLog.obj : error LNK2001: unresolved external symbol __imp_GetKeyNameTextA
    1>KeyLog.obj : error LNK2001: unresolved external symbol __imp_CloseHandle
    1>KeyLog.obj : error LNK2001: unresolved external symbol __imp_CreateThread
    1>LINK : error LNK2001: unresolved external symbol _DllMainCRTStartup
    1>C:\Users\User1\Documents\Visual Studio 2010\Projects\Test\x64\Release\Test.dll : fatal error LNK1120: 12 unresolved externals
    ========== 빌드: 성공 0, 실패 1, 최신 0, 생략 0 ==========

    • Favicon of https://blog.ryeol.com BlogIcon ryeol 2013.09.08 22:22 신고  댓글주소  수정/삭제

      Visual Studio 2012 Professional 에서 컴파일했고, 플랫폼을 x64 으로 하면 잘 됐던 걸로 기억하고 있습니다.

      링크 에러가 난 함수들이 Kernel32.dll 관련 함수들로 보이는데요.
      약간의 검색으로 Visual Studio 2010 기준으로 다음과 같은 해결책을 제시하는 내용을 찾아냈습니다.
      Kernel32.lib 를 64비트 버전으로 변경하는게 핵심같습니다.

      1. Project->Properties->Config Properties->General->Platform Toolset-> V100 설정
      2. Properties->VC++ Catalog->Library Catalog 를 $(WindowsSdkDir)lib\x64 로 설졍
      3. C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64 에 있는 Kernel32.lib 를 프로젝트 폴더에 복사 (답변글을 작성한 사용자의 프로젝트 폴더에 Kernel32.lib 가 있기때문에 복사했다고 함)
      4. Properties->Link->Input 에 Kernel32.lib 추가하고 msvcrt.lib 삭제

      출처:
      http://social.msdn.microsoft.com/Forums/vstudio/en-US/58f6e221-1b77-4c4c-b5d9-fca82d0ca7b3/about-error-lnk-2019-error-lnk2001

  4. flydog 2014.07.14 09:16  댓글주소  수정/삭제  댓글쓰기

    64비트 서버에 64비트용 dll 파일을 system32 폴더에 넣고 regsvr32로 등록을 했습니다.
    재배포 패키지도 설치를 했구요.
    그리고서 ASP로 만들어서 접속을 하니 "ActiveX 구성요소는 객체를 작성할 수 없습니다." 하고 오류가 나오더군요.
    설치된 dll의 등록정보에서 보안탭에서 everyone에 모든권한을 주고 해봤는데도 마찬가지네요...
    dll 이나 재배포 패키지를 설치하고, 서버를 리부팅하거나 iis를 재시작해줘야 하나요?
    아니면 무슨 문제가 있을까요?

    • Favicon of https://blog.ryeol.com BlogIcon ryeol 2014.07.21 23:52 신고  댓글주소  수정/삭제

      안녕하세요.
      해당 에러는 제가 찾아본 바로는 64비트 OS 에서 32비트 DLL 을 실행했을 때 에러 같은데요.
      일단 응용프로그램 풀에서 항목 선택 후 -> 고급 설정 -> 32비트 응용 프로그램 사용을 True 로 하고 테스트해 볼 필요가 있을거 같습니다.

  5. 라이언 2014.12.01 16:47  댓글주소  수정/삭제  댓글쓰기

    소스 잘 쓰고 있습니다.

    저도 flydog 님처럼 64비트 서버에 64비트 dll 을 D://dll/ 폴더에 넣고 regsvr32 로 등록하고 실행했더니

    Set objEncrypter = Server.CreateObject("Ryeol.StringEncrypter")

    이부분에서

    Microsoft VBScript 런타임 오류 오류 '800a01ad'
    ActiveX 구성 요소는 개체를 작성할 수 없습니다.

    이런 오류가 나네요.
    응용프로그램 풀 > 고급설정 > 32비트 응용 프로그램 사용은 True 로 되어있습니다.

    이전에 HyeongryeolStringEncrypter.dll 소스는 잘 쓰고 있었습니다.
    64비트로 서버를 변경하면서 64비트 지원 소스를 찾다보니 여기까지 왔는데요.
    등록은 되는데 실행이 안되네요.
    감사합니다

  6. 라이언 2014.12.01 17:29  댓글주소  수정/삭제  댓글쓰기

    왜 그런지 확인하였습니다.

    32비트 응용프로그램 사용을 True로 해 놓으면 64비트 응용프로그램의 createobject는 되지만 저런 오류가 뜨는거 같습니다.

    false로 하니까 잘 실행이 되네요.

    하지만 다른 32비트 dll 들이 사용이 안되서 실제 사이트에서는 다른 오류가 발생합니다.

    천상 32비트 dll 을 syswow64 에 있는 regsvr32 로 등록해서 써야할 거 같은데 그렇게 하니까 "지정된 모듈을 찾을 수 없습니다" 라고 나오네요.

    혹시 무슨 방법이 없을까요?

    부탁드려요.

    • Favicon of https://blog.ryeol.com BlogIcon ryeol 2014.12.06 20:26 신고  댓글주소  수정/삭제

      안녕하세요.

      RyeolStringEncrypter.dll 를 사용하시는 건가요? 그렇다면 Visual Studio 2012 용 Visual C++ 재배포 가능 패키지도 설치하셔야 합니다.

      64비트 OS에서 32 bit 버전 DLL을 사용하실 경우, C:\Windows\SysWOW64 에 복사하신 후 C:\Windows\SysWOW64\regsvr32 로 설치한 다음, 32비트 응용프로그램 사용을 True 로 하시면 동작할 거 같습니다.

  7. 차니 2015.02.03 21:01  댓글주소  수정/삭제  댓글쓰기

    초보자 여쭙니다.
    자바스크립트 소스가 있어 sha2-256값을 생성하였지만 웹 소스 보기로 string 값이 모두 보이는 까닭에
    다른 방법을 찾다가 우연히 이 글을 보게 되었습니다.
    사용 환경은 리눅스(centos 7.x) 에 php 사용중입니다.
    웹에서 string 일부만 넘기고 실제 sting 값의 대부분은 해쉬함수 생성 되는 별도 소스에 두고 싶습니다.
    그리고 여기서 만든 해쉬값과 다른 서버에서 만든 해쉬 값을 비교해서 같을 경우 실행 되도록 하고자 합니다.
    다른 서버에서의 해쉬 생성은 웹페이지에서 넘긴 일부 파라미터로 생성 됩니다.
    해쉬 값 생성을 위한 일부 파라미터만 넘겨서 해쉬 값을 생성 하려면 어떻게 하는 것이 좋을련지요?
    게시한 소스는 리눅스 + php에서도 가능할련지요? vs로 작성 된 거라?
    답변에 미리 감사드립니다.

    • Favicon of https://blog.ryeol.com BlogIcon ryeol 2015.02.09 08:35 신고  댓글주소  수정/삭제

      안녕하세요.

      말씀하신 내용을 제가 제대로 이해한 것인지는 모르겠지만, 일부값 해시와 전체값 해시 비교가 가능할지는 의문입니다.
      별로 도움이 되지 못해 죄송합니다.

  8. Favicon of https://kosaja.tistory.com BlogIcon KOSAJA 2016.10.28 10:05 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    공개 감사 드립니다.
    한가지 궁금한것이 있어서요.
    일단 asp에서 암호화 하고 복호화 하면 정상적으로 작동을 합니다.
    그런데 java에서 암호화 한값을 asp에서 공개하신 모듈로 복호화를 하면
    _GetActualSizeOfPkcs7: The padding size must be a number greater than 0 and less equal than the block size.
    이라는 오류가 나옵니다.

    이부분에 대한 조언좀 들을 수 있을까요..



StringEncrypter.zip

소스 관리의 편의 문제로 현재 주석은 영어로 작성되어 있습니다.
(ASP 와 ASP.NET 용 새 버전이 있습니다.)

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(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)
다음 코드는 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);
다음 코드는 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) ;

참고자료
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. 이전 댓글 더보기
  2. 질문 2009.12.18 16:42  댓글주소  수정/삭제  댓글쓰기

    windows2003 서버에서 regsvr32로 등록하려고 하니까 "지정된 모듈을 찾을 수 없습니다"라고 나오는데 해결책이 있을까요?? 경로는 제대로 해줬고, 다른 dll은 등록이 잘 되는듯해서요

    • Favicon of https://blog.ryeol.com BlogIcon ryeol 2009.12.19 16:51 신고  댓글주소  수정/삭제

      제가 클린 설치된 Windows Server 2003 Standard Edition 에 모든 업데이트를 완료한 상태에서 설치를 해 봤는데, 잘 되네요.
      혹시 %WINDOWS%system32 폴더에 MSVCR71.DLL, ATL.DLL 이 있는지 먼저 확인해 보시는게 좋을 듯 합니다.

  3. 비됴 2009.12.21 18:15  댓글주소  수정/삭제  댓글쓰기

    허억...몇일째 검색중이었는데....
    정말 감사합니다. 랭귀지 공통 암호화 모듈을 찾고있었는데...
    이렇게...고마울수가 정말정말 감사합니다.

  4. 궁금합니다.. 2010.04.02 17:47  댓글주소  수정/삭제  댓글쓰기

    64비트 환경인 2008 R2 에서도 되는지요?

  5. 박종영 2011.01.25 17:36  댓글주소  수정/삭제  댓글쓰기

    정말 좋은 자료네요..

    Java -> PHP, PHP -> Java 로 암호화 하는 내용이 필요했는데.. ㅎㅎ

    감사합니다.

  6. 이주현 2011.02.07 18:10  댓글주소  수정/삭제  댓글쓰기

    소스 오픈 감사드립니다. 저도 마침 업체들과 암호화 문제로 2주간 골머리를 썩고 있었는데요..
    이렇게 완성된 소스를 공개해주셔서 바로 이용 할수 있었습니다.
    바쁜 일정에 여유를 찾게 해주셔서 감사드립니다!

    새해 복 많이 받으세요^^

  7. yj-s123 2011.03.30 15:11  댓글주소  수정/삭제  댓글쓰기

    좋은 자료 감사드립니다~~

    Uncaught exception 'Exception' with message 'The padding size must be a number greater than 0 and less equal than the block size

    이런 에러는 왜 나는지 알고 싶습니다... 저는 배열로 받아와서 복호화를 하려고 하는데... 값의 사이즈가 크면 에러를 내더라구요... 조절할 수 있는 방법을 알고싶습니다....

  8. 김토니 2011.04.04 10:14  댓글주소  수정/삭제  댓글쓰기

    좋은 소스 공유 감사드립니다..
    저작권 관련해서는 문제 되는 부분은 없는지 문의 드립니다.

    감사합니다.

  9. 뽀인뜨 2012.07.06 18:43  댓글주소  수정/삭제  댓글쓰기

    좋은 소스를 오픈해 주셔서..
    감사하게 잘 사용하고 있습니다.

    한가지 여쭤볼께 있는데요..
    윈도우 서버 64비트도 지원 되는지 알고 싶습니다.

    32비트에서 잘 돌아가는 소스를 가지고,
    64비트로 옮겨서 테스트 해보면 다음과 같이 오류가 발생합니다.
    - 윈도우 2003 64비트 : 레지스트리에 등록 안됨
    - 윈도우 2008 64비트 : 32비트 호환모드로 하면 동작하나, 다른 64비트 모듈에서 오류 발생

    64비트 서버에서 사용할 수 있는 방법을 알고 싶습니다~ ^^
    감사합니다~

    • Favicon of https://blog.ryeol.com BlogIcon ryeol 2012.07.06 22:02 신고  댓글주소  수정/삭제

      안녕하세요. ^^

      제가 찾은 바로는 64비트에서 32비트 COM DLL 을 등록하려면 32비트 regsvr32 를 사용해야 한다고 합니다.
      windows\SysWOW64 에 있는 regsvr32 를 사용하면 된다고 합니다.

      출처:
      http://stackoverflow.com/questions/3439845/register-32-bit-com-dll-to-64-bit-windows-7

      대략 설치 방법은 dll 을 %WINDIR%SysWOW64 에 복사하신 후 위의 32비트 regsvr32 로 등록하시면 될 거 같습니다.
      그 다음 웹사이트 응용 프로그램 풀 -> 고급 설정 -> 32비트 응용 프로그램 사용을 True 로 하시면 될 거 같은데요.

      다른 64비트 모듈에서 오류가 발생한다면 암호화 부분만 따로 가상 디렉터리로 빼야 하지 않을까 생각합니다.

  10. goodman 2013.01.31 01:27  댓글주소  수정/삭제  댓글쓰기

    안녕하세요! 정말 좋은소스를 오픈해줘서 넘넘 감사합니다.

    제가 실력이 너무 딸리는 관계로요.... system32에 dll파일 등록은 잘했는데요

    비쥬얼베이직에서 dll파일을 찾아서 로드하려고 하니, 안된다고 나오네요!

    구굴링해보니, def파일밑에다가 vb_add 모 이런걸 넣어야 VB에서도 로드가 된다고 하는데

    도통 못하겠네요!

    비쥬얼베이직에서도 위 aes암호를 같이 쓸수는 없을까요?

    • Favicon of https://blog.ryeol.com BlogIcon ryeol 2013.01.31 23:38 신고  댓글주소  수정/삭제

      안녕하세요. ^^

      아마도 Visual Basic 6 에서 개발하시는것 같은데요.
      dll 은 COM dll 이기 때문에 먼저 regsvr32 로 등록하셔야 합니다.

      그 다음에 다음처럼 하면 될 거 같습니다.
      (VB 6 에서 테스트하지는 못했습니다.)

      Dim objEncrypter As Object
      Dim strEncrypted As String
      Dim strDecrypted As String

      Set objEncrypter = CreateObject("Hyeongryeol.StringEncrypter")

      objEncrypter.Key = "암호화 비밀키입니다."
      objEncrypter.InitialVector = "초기화 벡터입니다."

      strEncrypted = objEncrypter.Encrypt("테스트 문자열")
      strDecrypted = objEncrypter.Decrypt(strEncrypted)

      참고자료:
      http://binglongx.wordpress.com/2011/02/28/visual-basic-6-calling-activex/

  11. goodman 2013.02.05 14:01  댓글주소  수정/삭제  댓글쓰기

    감사합니다.
    암호화 잘 됩니다.

    좋은자료 주셔서 감사합니다.

    좋은일만 생기길 바랍니다. 꾸벅~

  12. 김태연 2013.02.13 09:55  댓글주소  수정/삭제  댓글쓰기

    고생해서 만든자료 공개해 주셔서 감사합니다.

    덕분에 많은 도움 됐습니다.

  13. 쩔어 2013.05.28 19:49  댓글주소  수정/삭제  댓글쓰기

    정말 좋은 자료 감사드리고요, 질문이 있어서 글을 드립니다.
    암호키와 초기화 벡터는 무엇을 의미하는것이고, 어떤값을 셋팅을 해야하나요?

    • Favicon of https://blog.ryeol.com BlogIcon ryeol 2013.05.29 01:32 신고  댓글주소  수정/삭제

      안녕하세요. ^^

      비밀키는 암호화와 복호화에 사용하는 데이터입니다.

      암호화된 데이터는 비밀키를 알고 있는 경우에만 복호화가 가능합니다.

      비밀키는 절대 외부로 노출시켜서는 안됩니다.

      누구도 짐작하기 힘든 은밀한 값을 사용하시면 됩니다.

      반면에 초기화벡터(Initialization vector) 는 난수화(Randomization) 을 높이기 위해 사용하는 값입니다.

      같은 비밀키로 여러 번 암호화할 경우 패턴이 노출되는 것을 방지할 목적으로 보통 임의 생성된 초기화벡터를 사용하여 암호화를 한 후 초기화벡터와 암호문을 같이 전송합니다.

      따라서 초기화벡터는 외부로 노출되고 임의의 값을 사용하는 경우가 많습니다.

  14. 초급개발자 2013.07.18 18:28  댓글주소  수정/삭제  댓글쓰기

    정말 감사합니다.

  15. Favicon of http://blog.naver.com/tohyjeon BlogIcon 감사합니다. 2013.07.27 23:56  댓글주소  수정/삭제  댓글쓰기

    정말 감사합니다. ASP 랑 PHP랑 호환되는 암호화 모듈을 만들생각을 하기 머리가 지끈지끈 아팠는데..
    여기서 해결하였습니다.
    고맙습니다.!!!!

  16. 감사할뿐 2013.10.02 20:16  댓글주소  수정/삭제  댓글쓰기

    좋은 자료 감사합니다. 많은 도움이 되었네요.

  17. 감사감사.. 2013.10.31 17:36  댓글주소  수정/삭제  댓글쓰기

    감사합니다. 문제 해결에 많은 도움이 되었습니다.

  18. BlogIcon 김멍멍 2014.08.28 17:05  댓글주소  수정/삭제  댓글쓰기

    먼저 좋은자료 감사드립니다.
    한기지 질문이 있는데 PHP에서 사용하기위해서는 Mcrypt를 설치해야 사용이 가능한것인가요? 인스턴스 생성후에 함수호출하면 에러가 발생합니다...

  19. 이창기 2015.01.17 22:27  댓글주소  수정/삭제  댓글쓰기

    안녕하세요
    뭐좀 물어보려고 하는데요
    지금 개편준비하는 사이트가 여기 공개된 소스를 이용해서 암호화를 한듯 싶습니다.
    기존 사이트는 PHP이고 소스를 보니 동일한것 같습니다.
    개편준비하는 사이트는 jsp이고요 데이터 이관을 하려고 보니 여기 암호화 모듈을 이용한듯 한데 복호화를 어떻게 해야할지 난감해서요...
    단지 php 파일
    //const STRENCRYPTER_BLOCK_SIZE = 16; // 16 bytes
    const STRENCRYPTER_BLOCK_SIZE = 64; // 64 bytes
    이렇게 기존16을 64로 변경한듯 하고요.
    저렇게 변경된 모듈을 java파일을 받아서 복호화를 해보니 에러만 나네요 java에서 도 복호화를 하기위해서 어디를 바꿔줘야 할까요?
    답변기다릴게요.... ㅠㅠ


    • Favicon of https://blog.ryeol.com BlogIcon ryeol 2015.02.09 07:56 신고  댓글주소  수정/삭제

      안녕하세요. ^^

      최근 바쁜 일로 댓글을 지금 봤습니다.
      아마도 이미 답을 찾으셨겠지만, 답글을 달아봅니다.

      블록크기가 64 바이트인 PKCS7 패딩이 사용된 듯 싶은데요
      다음과 같은 작업을 하는 커스텀 클래스를 만드셔야 할 거 같습니다:

      1. PHP 에서 암호화된 문자열을 BASE 64 디코딩
      2. 128 bit CBC 모드 AES 복호화
      3. 블록크기가 64 바이트인 PKCS7 패딩 제거
      4. UTF-8 디코딩

      자바는 제가 손을 놓은지 오래되서 상세한 구현을 설명드리기 어려운 점 양해 부탁드립니다.

  20. 감사합니다 2015.07.07 16:50  댓글주소  수정/삭제  댓글쓰기

    우선 좋은 소스 공개해주셔서 감사합니다. :-)
    작업하다가 궁금한 점이 생겨서요 (ASP에서 사용예정입니다.)

    기존 일반내용에서 이제 암호화된 값으로 변경을 하는데, 해당 내용이 암호화가 되어있는 값인지 아닌지 체크할 수 있는 방법이 있을까요? (동일한 키, 벡터값은 존재하고 알고 있다는 조건하에요.)

    즉 A라는 데이터컬럼에서

    1행은 암호화가 되어서 "aslkj12aslkj" 형태로 나와있고
    2행은 암호화가 안된 데이터라 "가나다라" 형태로 나와있는데

    한행씩 루프로 안된 내용들만 변경하려고 하려고 하면 체크할 수 있는 방법이 있을까요?
    (기존 데이터에서 어떤 녀석들은 암호화가 되어있고 어느녀석들은 안되어 있고 섞여 있어서요..ㅠ.ㅠ)

    다시한번 좋은 소스 공개에 감사드립니다. (덕분에 암호화 관련되어 주고 받는 쪽이 손쉽게 풀렸습니다 :-) )

  21. 64비트안됨 2016.04.05 17:58  댓글주소  수정/삭제  댓글쓰기

    33