이번에 포스팅할 주제는 AES256 대칭키를 이용한 암호화 방법입니다.
필요에 의해 C#, Objective C(IPhone), PHP, JAVA(Android), Perl에서 전부 호환되는 AES256 대칭키 라이브러리를
만들어야 했습니다. 아마 인터넷을 검색하셔도 짠~! 하고 나오지 않을 꺼라고 자신합니다.
거의 모든 소스에 커스터마이징이 필요했습니다.
특히 PHP와 Objective C, JAVA와 C#의 암복호화가 정말 까다로웠습니다.
Padding과 IV등이 각 언어마다 틀려서 맞추기가 까다롭더군요.
퍼가시는분들은 반드시 고마움을 표시해주세요. ㅎㅎㅎ
사실 제가 필요해서 만든거지만…

Download

All Source

sample_all_source_aes256_imcore_net.zip


JAVA

Sample : sample_java_aes256_imcore_net.zip
Java 6(only JDK6) security File : java_jdk6_security.zip


Android (SDK 2.3.3)

Sample : sample_android_aes256_imcore_net.zip
Java 6(only JDK6) security File : java_jdk6_security.zip


PHP

Sample : sample_php_openssl_aes256_imcore_net.zip
PHP 5.2 이하 버젼 openssl 미지원시 mcrypt 사용버젼 : sample_php_non_openssl_aes256_imcore_net.zip


Objective C (Xcode 4.2 + SDK 5.1)

Sample : sample_objective_c_aes256_imcore_net.zip


Perl

Sample : sample_perl_aes256_imcore_net.zip


Javascript

Sample : sample_javascript_aes256_imcore_net.zip


Visual C# (Visual Studio 2010)

Sample : sample_visual_c_sharp_aes256_imcore_net.zip

Link

Python(파이썬)

Link : Dokenzy님 블로그 > Python:: PyCrypto를 이용한 AES 암호화
파이썬 자료는 귀중한 자료네요 ^^/

추가 예정

Visual C++

Sample : sample_visual_cpp_aes256_imcore_net.zip


Action Script 3

Flex Sample : sample_actionscript3_flex_aes256_imcore_net.zip
Flash Sample : sample_actionscript3_flash_aes256_imcore_net.zip


Ruby

Sample : sample_ruby_aes256_imcore_net.zip

질문 있으시면 댓글 남겨주세요 ^^/

Encryption AES256 = C# + Objective C(ios) + PHP + JAVA(Android) + Perl + Javascript + Python
Tagged on:                 

267 thoughts on “Encryption AES256 = C# + Objective C(ios) + PHP + JAVA(Android) + Perl + Javascript + Python

    1. 안녕하세요. 자료잘쓰겠습니다. 혹시 서버 쪽 말구 클라이언트 자바스크립트 부분도 예정에 있으세요? 현재 자바(AES256) 암호화처리와 자바스크립트 부분 암호화 모듈이 pair 되어야하는데 암호화 개념이 없다보니 자바스크립트 자료찾는것도 힘드네여..
      수고하세요.

      1. 안녕하세요.
        좋은하루님. 자바스크립트쪽도 물론 있습니다.
        하지만 대칭키는 대칭이 되는 Key가 존재해야 하므로, 서버사이드에서는 노출이 되지는 않지만 자바스크립트 같은 경우는 Key가 노출이 되기 때문에
        왠만해서는 대칭키 알고리즘을 쓰지 않습니다. 그래서 참고할 만한 소스가 없는거 같습니다.
        조만간 자바스크립트도 올려놓겠습니다. 하지만 권장하지는 않아요 ^^; 왠만하면 SSL를 쓰시는쪽을 추천합니다. https 아시죠? 비용이 발생하지만
        StarSSL 같은 경우는 개인에 대해서는 무료로 설치 가능한 것으로 알고 있습니다.
        감사합니다.

    2. 안녕하세요.. 이번에 처음와서 소스를 잘 다운 받아서 실행해보았습니다.
      우선적으로 감사의 말씀을 드리구요..
      그런데 C#과 IOS에서 똑같은 형태로 테스트를 해보았는데요..
      결과가 상이합니다.
      이 부분에 대해서 답변좀 부탁드립니다…(__) 수고하세요

  • 안녕하세요.
    core님 답변감사합니다.
    저도 SSL을 써야하는것은 아는데요… 대외시스템이 아닌 내부시스템이라 SSL적용대신 아이디,패스워드부분만 스크립트에서 처리만 하는걸로 협의가 되서요 ^^.
    그런데 반드시 AES256이 정책이라고 하니 AES128은 찾았는데 ㅠㅠ
    SSL은 비용이 발생하는부분도 있고요…
    조만간 자바스크립트도 올려주신다니 좀 기달려봐야겠네요 ㅎㅎ

    즐거운 연휴되세요.

    1. 안녕하세요.
      좋은하루님. 맞습니다. SSL를 쓰기에는 비용문제가 크죠 ^^;
      Javascript용 AES는 이미 Post 해 놓았습니다.
      기존 Mark Percival님이 만드신 Gibberish-AES Code에 수정을 하였습니다.
      다른 언어들의 AES와 맞추다보니 쉬운게 아니더군요.
      원하는 결과값이 안나오길래 padding 쪽과 IV 쪽을 손보니 잘 돌아가는 것 같습니다.
      Gibberish-AES가 MIT 라이센스라 큰 문제는 없을 것 같습니다.
      또 Code를 분석하니 128/192/256 bit 형태의 암복호화가 가능한 것 같습니다.
      즐거운 한주 되세요.

  • 안녕하세요..
    core님 정말감사합니다. 1주일간 암호화때문에 골머리아팠는데요 ^^
    신경써 주셔서 감사합니다..
    소스 정말 잘쓸게여… 다시한번 감사해요..
    core님 즐거운한주 되세요.

  • 와우!!!! 무척 감사합니다. ㅎㅎㅎ
    급하게 찾고 있던 차였거든요~ 서로 다른 언어에서
    암호화한 패킷을 주고받아야하는 상황이었던터라 ㅎㅎㅎ
    너무 고맙습니다 ㅎㅎㅎ
    다만, 한가지 좀 여쭈어도 될까요;;;
    java source를 실행하였을 때에
    Cipher.init 메소드 호출시에 Illegal key size exception이 발생합니다.
    검색을 통해서 Unlimited Strength Jurisdiction Policy Files 를 version6(?)로
    JDK에 덮어씌웠습니다.
    그래도 같은 에러가 발생하고 있네요.
    스스로 API 찾아보면서 답을 구해야하는데;; 이렇게 먼저 여쭙게 되네요 ㅠㅠ
    답변 주시면 무척 감사하겠습니다. ㅎㅎㅎ

    1. 안녕하세요.
      김문수님 ^^
      JAVA에서는 AES관련 암호화 모듈을 쓰면 말씀하는 에러를 뿜어냅니다 ^^;
      방법은 JDK에 디렉도리에 넣으시면 안되고 Jre/lib/security 경로에 넣으셔야 합니다.

      예)
      C:Program FilesJavajdk1.6.0_25jrelibsecurity
      그리고
      C:Program FilesJavajre6libsecurity

      또 문의 주세요~
      감사합니다.

      1. 안녕하세요^^;
        JDK 6에 맞춘 버전으로 (jce-policy 압축파일을 다운로드 받았을 때에 파일 내의 READ ME 문서에서 안내하는 버전을 기준으로)
        US_export_policy.jar 파일을 말씀해주신 경로에 덮어씌었습니다.
        그래도 같은 에러가 나오는데 해당 이유를 잘 모르겠네요 ㅠㅠ
        좋은 정보를 알려주셨는데 이렇게 무턱대고 징징거려 미안하네요;;;ㅠㅠㅠ

          1. 여기 올려져 있는 JAVA AES코드도 64bit에서 테스트 했습니다.
            제가 설치한 JDK는 jdk1.6.0_31 입니다.
            혹시나 싶어 제가 지금 적용해서 사용하고 있는 security 폴더를 링크해놨습니다.
            확인해보세요. ^^
            그리고 local_policy.jar 와 US_export_policy.jar 2개의 파일을 넣어셔야 될껍니다.
            언제든지 글 써주세요. 제가 아는범위까지는 아는척하겠습니다 ^-^
            그럼 좋은 주말 되세요~

  • 아아 답변감사합니다 ^^;;;
    해외문서를 뒤지면서 워드를 좀 놓쳤었나보네요;;;
    US_export_policy.jar 하나만 해당하는 path에 덮어 씌어주니
    잘 작동합니다^^;;;
    저도 혹시나 하는 맘에 점심때 해당 path에 넣어놓고 테스트해보니
    그제서야 되더군요^^;;; 답변 감사합니다. 🙂
    이번 기회에 JCE 관련해서 공부도 좀 해봐야겠어요 ㅎㅎㅎ

  • 감사합니다.

    이번에 php, java 에 같이 적용해야 하는데,

    딱 원하는 모듈입니다.

    정말 잘 쓰겠습니다.

    꾸벅..

    1. 도움이 되신다니 다행입니다. ^^
      적용중에 에러가 있거나 어려움이 있으시면 언제든지 말씀해주세요.

  • 올려주신 내용을 테스트해보고 있습니다.
    javascript 부분에 대한 테스트 중 한글 입력값에 대한 암호화 결과값이
    php 버전과 상이합니다.
    이 문제를 해결하기 위해서는 어떤 부분을 확인해봐야하는지
    comment 주시면 감사하겠습니다.

  • 안녕하세요.. 이번에 처음와서 소스를 잘 다운 받아서 실행해보았습니다.
    우선적으로 감사의 말씀을 드리구요..
    그런데 C#과 IOS에서 똑같은 형태로 테스트를 해보았는데요..
    결과가 상이합니다.
    이 부분에 대해서 답변좀 부탁드립니다…(__) 수고하세요

    1. 안녕하세요.반갑습니다.
      직장에 아이맥이 있어서, 내일 출근하는대로 예제를 만들어서 올려놓겠습니다.
      현재 직장에서도 IOS + C# + PHP 암호화 통신을 이용하는 프로젝트를 진행중이라서 문제가 없을 듯 싶습니다.
      참고하시면 될 것 같습니다.
      감사합니다.

  • 빠른 답변 감사드립니다.
    IOS와 C# 통신이 잘 된다고 한다면 아마도.. 제가 C#쪽 소스를 수정해서 그런가 봅니다. 왜냐면 제가 C#쪽을 테스트 해보니깐 밑의 소스 6번째 줄에서 에러가 발생하였기 때문입니다.

    RijndaelManaged aes = new RijndaelManaged();
    aes.KeySize = 256;
    aes.BlockSize = 128;
    aes.Mode = CipherMode.CBC;
    aes.Padding = PaddingMode.PKCS7;
    aes.Key = Encoding.UTF8.GetBytes(key);
    aes.IV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

    aes.Key = Encoding.UTF8.GetBytes(key); 에서 에러가 났었습니다.
    그래서 key = key.PadRight(16); 이 소스를 추가를 했었습니다.

    1. 혹시 그 부분에서 아시는 점이 있으신가요?
      신경써 주시면 감사하겠습니다..
      그럼 수고하세요..

      1. 안녕하세요.
        시간이 너무 많이 지났네요. 죄송합니다.
        요즘 프로젝트 기간이여서 신경을 못쓰고 있다가 오늘에서야 다시 확인하게 되네요.
        확실히 IV 값이 틀려서 다른 결과값이 나오는 것으로 판단됩니다.
        이기종간의 암복호화는 상당히 차이가 있어서 IV와 PADDING를 모두 같은 형태의 값으로
        고정시켜주셔야 건강에 이롭습니다 ^^;
        감사합니다.

  • 감사합니다 ^^ 암호화 부분은 솔직히 많이 알지 못하는 분야다 보니.
    매일같이 찾아 쓰게 됩니다. 이번에 안드로이드, 아이폰, 액션스크립트, php 에서 암호화 복호화 프로젝트가 있는데 너무 유용할거 같습니다 ^^

    이런 자료 공유해주셔서 감사드립니다 ^^

  • 저는 c#에서 테스트 해보는데 key값을 샘플에 있는 값 말고 다른 값을 넣어보니

    ‘지정한 키는 알로리즘에 유효한 크기가 아닙니다.’라는 예외가 발샐하고 있습니다.

    key값은 “abcdefghijklmnopqrstuvwxyz” 이렇게 설정하여 보았는데요…

    제가 먼가 잘못한걸까요?

    1. 안녕하세요 ^^

      우선 말씀하신 부분은 반드시 에러가 발생합니다.
      AES를 이용하기 위해서는 키길이를 반드시 규격에 맞게 입력하셔야 합니다.
      64/128/256bit이므로 Byte로 계산하면 각각 키길이는 8/16/32byte로 환산됩니다.

      1byte = 8bit

      그리므로 입력하신 알파벳은 26글자 이므로 6글자가 더 필요합니다.
      예) abcdefghijklmnopqrstuvwxyz123456

      감사합니다.

    1. 안녕하세요.
      JDK 1.4이상이면 AES 사용이 가능합니다.
      오히려 1.6부터 기본적인 jdk로 AES 암복호화시 키길이 관련 에러가 발생합니다.
      반대로 그 이하는 security 파일을 따로 적용하지 않아도 될 듯 싶습니다.
      혹시 사용해보시고 에러가 발생하시면 말씀해주세요.
      감사합니다.

    1. 안녕하세요. ^^
      VC++ 용은 요청이 있으면 하려고 했습니다.
      이제부터 작업들어가야겠네요 ㅋㅋㅋ
      좋은 주말되세요.

  • 정말정말 감사합니다^^

    꼭 필요한 부분인데.. 일주일째 해메고 있었습니다 ㅜㅡ

    그럼 core님만 믿고 기다리고있겠습니다^^

    감사합니다!

  • 현재 java와 vc++간의 암복호화가 필요한 상황입니다…윽;;

    core님이 작성하신 java버전을 사용하였는데

    vc++버전과 java버전이 서로 호환만 되면 됩니다~

    참고로 vc++은 유니코드기반입니다~

    구원해 주소서~ ㅜㅜ

  • 안녕하세요.
    AES 암복호화 관련해서 게재하신 내용을 참고해서 테스트 중에 있습니다.

    XCode에서 빌드 성공 후 테스트 시 [NSConcreteMutableData AES256EncryptWithKey:] unrecognized selector sent to instance 라고 오류가 발생하는데 관련해서 조언좀 부탁드리겠습니다.

    감사합니다.

    1. 설명이 부족한듯하여 덧붙이자면 CoCoa Static Library에 AES 라이브러리가 추가되고 이를 Test프로젝트에서 불러다 사용할 시 위 오류가 발생합니다.

      혹시나 해서 Single View App로 테스트해보니 여기서는 잘 되네요..ㅠㅠ
      CoCoa Static 라이브러리 관련 설정이나 뭔가 다른게 있는것 같은데..

      1. 안녕하세여. heimi 님.
        확인해보니 정상 작동하네요.
        혹시 암호화 관련 기본 라이브러리 프레임워크를 임포트 하셨나요?
        CommonCrypto 관련 라이브러리 입니다.

        감사합니다. 좋은하루 되세요 ^^/

  • 잘 참고하고 갑니다.

    그런데 질문이 있습니다.

    JAVA 와 Objective-c 통신을 구현중에 있는데

    iv 값고 Padding이 다른것 같습니다.

    JAVA에서는 PKCS5 패딩인것 같고

    Objective-c는 PKCS7 패딩인것 같은데 둘이 통신하게 하려면

    어디를 수정해야할까요??

      1. 안녕하세요. 엠씨브이님.
        답변 늦게 드려서 죄송해요. 요즘 미친듯이 프로젝트를 하고 있어서 정신이 없네요.
        자바 프로젝트에 lib안에 commons-codex-1.4.jar를 추가해보세요 ^^
        추가하지 않으시면 에러가 뿜빠뿜빠~
        좋은 하루 되세요.

  • 안녕하세요 ^^ 공유해주신 모듈 공유해주신점 감사합니다.
    너무나~~~ 유용하게 사용하고 있습니다.

    제가 사용시 특정 모듈&라이브러리 사용내역을 남길려고 하는데
    라이센스는 어떻게 지정해놓는게 좋을까요?

    새해 복 많이 받으시고 공유해주신점 다시 한번 감사드립니다 ^^

    1. 안녕하세요 ^-^ 새해 복 많이 받으세요.
      라이센스라뇨~ 저도 인터넷에 있는 자료들을 조금 수정한것 밖에 없는데요.
      마음껏 쓰셔도 됩니다.

      감사합니다.

  • 안녕하세요.
    프로젝트에 넣을 aes 암호화 라이브러리를 몇시간 찾아 헤매이다가
    core님의 글을 보고 몇 분만에 적용되서 정말 감사하게 생각하고 있습니다.

    다름이 아니라,
    Java(JSP)의 경우, jdk/security/ 폴더 내에 해당 jar를 넣어야 정상구동이 된다고 설명해주셨는데,
    혹시 프로젝트 내에 넣는 방법은 없을까요..

    1. 안녕하세요 바우님.
      JDK Security 관련파일은 아무래도 JDK에서의 키길이에 대한 패치이므로 JDK 초기 로드시에 사용되는 파일로 알고 있습니다.
      자세한건 관련 포럼이나 Sun에서 운영하는 쓰레드를 찾아보는 수밖에 없을 것 같네요.
      현재로써는 리눅스던 윈도우던 JDK가 설치되어 있는 폴더쪽에 넣어주는 방법밖에 없을 것 같습니다.
      그래도 넣기 힘든 환경이 있을 수 있는데, 그 경우에는 256이 아닌 128 키 길이를 이용하는 것도 방법일 수 있습니다.
      자바는 기본적으로 128 키 길이까지는 지원하니깐요. ^^;
      128bit 이라고 하더라도 보안에는 문제 없을 거라고 생각됩니다.

      감사합니다.

  • android, iphone, java based server 들 간의 데이터 암호화 문제로 하루종일 고민하다 이곳에서 힌트를 얻어 갑니다.
    큰 도움이 되었습니다.
    잘 쓰겠습니다~!

  • 안녕하세요,
    Java 서 AES-256 을 사용하여 암호화 사용중입니다.

    Cipher cipher = Cipher.getInstance(“AES/ECB/PKCS5Padding”); cipher.init(Cipher.ENCRYPT_MODE, SecretKeySpec(AES_CRYPTO_KEY,”AES”));
    return (cipher.doFinal(text.getBytes()));

    그런데 C++ (다른모듈) 에서 AES-256 암호화 한 것과 다른 값이 나오네요.
    C++ 에서는 OpenSSL 라이브러리를 사용하였으며 EVP 방식의 ecp 알고리즘을 사용하여 암/복호화를 진행하였다고 하네요.
    혹시 C++ 모듈쪽을 건드리지 않고 맞출 수 있는 방법이 있을까요?

    1. jquery님 안녕하세요.
      말씀하신 부분은 아마도 Padding이나 IV부분이 달라서 다른 결과가 나오는 것 같습니다.
      괜찮으시다면 해당 소소를 core@imcore.net로 보내주시면 테스트 후에 작성하여 보내드리겠습니다.

      감사합니다.

      1. 안녕하세요, 오전에 메일보내드렸는데,, key 가 잘못되었다는 걸 알았네요.^ ^;;
        AES 256bit 암호화 하기 위해서 Key 가 16byte 가 아닌 32byte 로 해야 하는걸 이제 알아서 해결 하였습니다. AES ECB 방식이라 IV 나 Padding 과 상관없었습니다.
        답변 감사합니다.^ ^

        1. 해결하셨다니 다행이네요 ^^
          의외로 키길이로 인해 오류를 보시는분들이 많으신것 같아요~
          행복한 하루 되세요~

  • 빛과소금같은 내용들이군요 🙂 멋진일 하십니다 ! 감사드립니다 ^^
    그런데 댓글달기 버튼 밑에 captcha가 있어서 묘하게 불편하군요..ㅜㅜ

    1. 안녕하세요. TYJang님.
      제가 더 감사드립니다. ^^
      그리고 captcha는 저도 너무 불편하네요 ㅠ_ㅠ 각종 성인광고들이 판을 쳐서 감당이 안되서 쓸 수 밖에 없었습니다.
      조금만 이해해주시고, 더욱 멋찐 자료 업데이트 하겠습니다.

      감사합니다.

  • Hi,
    I am interested in using the library for Windows 8, because despite having the C#, I can’t use it for Windows RT version. The problem is that “System.Security.Cryptography” is not compatible, and I do not know how to solve it.

    Thank you very much,

    Nice Job!

    1. Hi there.
      Thank you for visiting.

      What is the Visual studio version? 2008 or 2010?

      I can solve the problem.

      but, I want to know program version.

      I will wait for the answer….

      Thank you. 🙂

      1. Oh thanks!
        I’m using Visual Studio 2012 and I’m programming Windows 8 App in c#. I have searched but nothing has worked.
        One problem is that RijndaelManaged does not exist in WinRT so II can’t use. And somebody answers that method in web: http://social.msdn.microsoft.com/Forums/pl-PL/winappswithcsharp/thread/8f9ecac4-80d2-47c8-8c41-9d7877565bf5

        But not work properly, and I need encrypt like always because I use your library between all apps (iOS, Android, Web)

        Thank’s for your help!
        I’m really impressed of your work!

  • 안녕하세요?
    javascript 와 java간 대칭키 암호화를 구현 하는 중에
    운 좋게도 CORE님 사이트를 찾게되어 많은 참고를 하였습니다.
    현재 js와 java간에 암,복호화 테스트 중인데요.
    js간 암,복호화는 정말 잘되고있습니다.
    js와 java간에 문제가 생겨서 문의 드리는데요,
    js에서 암호화를 해서 java파일에서 복호화를 하려하면
    javax.crypto.IllegalBlockSizeException : Input length must be multiple of 16 when decrypting with padded cipher 에러가 납니다.
    짧은 파라메타들은 잘 암복호화 하는데, 일정 글자수를 넘어가버리니까 이런 에러가 나네요. 혹시 알고계신다면 답변 좀 부탁 드리겠습니다.
    감사합니다.

    1. 안녕하세요.
      방가워요.
      우선 저 에러는 키길이 에러입니다.
      JDK에서 기본으로 제공하는 bit는 128bit 입니다. 256bit 이상 사용하려 하신다면 Java 6(only JDK6) security File 또는 Java 7(only JDK7) security File을 받아서
      패치하시면 됩니다. 물론 아시겠지만 암호화의 키 길이는 8 -> 16 -> 32 자리로 올라간다고 보시면 됩니다.

      감사합니다.

      1. 정말 감사합니다.
        암, 복호화 때문에 정말 골치 아팠었는데,
        CORE님 덕분에 정말 수월하게 해결했습니다.
        많이 배우고 갑니다. 자주 들러서 정보 얻어갈께요~^^
        수고하세요!!

      2. 우선 소스감사합니다.

        같은문제로 고생중입니다.
        모바일 환경에서 사용하려고 하는데
        클라->서버로 보내는데 글자수가 커지면 위와 같은 에러가 납니다
        (javax.crypto.IllegalBlockSizeException : Input length must be multiple of 16 when decrypting with padded cipher )

        말씀하신데로 security 폴더에 2개 파일을 넣어봤는데
        특별히 변경되는점이 없습니다.
        제가 뭐 잊은게 있을까요??

  • 크헐 멋지십니다~
    만드시드라 고생이 많으셨겠어요~ ㅎ;
    감사한 마음으로 잘 쓰겠습니다~~ (_ _)
    복받으실꺼에요~ +_+

  • 좋은정보 감사합니다.
    언어 구분 없이 동일하게 암호화를 하기 위해서
    여기서 보고 했는데
    다시 보니 C++이 없네요.
    이미 자바랑 C#을 적용해서 개발 끝냈는데 갑자기 c++에서 막혀버렸네요
    직접하려고 샘플 찾아가면서 해도 암호화 값이 상당히 다르네요. ㅜㅠ

    결론은 C++ 버전도 부탁드려요~~

  • 질문이여
    자바 막 배우기 시작한 입문초보인데 능력자님꺼 갖다 붙여쓰고 싶은데도
    잘 모르겠어여.

    인터넷에서 검색해보니까
    이클립스에서 프로젝트를 만들었던 건
    file- import- general-Existing Project into Workspace-browse클릭-기존의 프로젝트를 지정
    으로 프로젝트를 불러왔어요~

    그리고 컴파일 했는데
    에러가 뜨는데 왜 그런걸까요.

    자바는 1.7
    이클립스는 주노
    버전이 안맞아서 그런가여?

    Exception in thread “main” java.security.InvalidKeyException: Illegal key size
    at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1024)
    at javax.crypto.Cipher.implInit(Cipher.java:790)
    at javax.crypto.Cipher.chooseProvider(Cipher.java:849)
    at javax.crypto.Cipher.init(Cipher.java:1348)
    at javax.crypto.Cipher.init(Cipher.java:1282)
    at net.imcore.AES256Cipher.AES_Encode(AES256Cipher.java:28)
    at net.imcore.Aes256.main(Aes256.java:29)

  • 암호학 공부하는 중인데 자료 감사하게 사용하겠습니다. ^^
    다양한 언어로 구현해 놓으셨더군요 정말 대단하십니다!!

  • Exception in thread “main” java.security.InvalidKeyException: Illegal key size
    at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1024)
    at javax.crypto.Cipher.implInit(Cipher.java:790)
    at javax.crypto.Cipher.chooseProvider(Cipher.java:849)
    at javax.crypto.Cipher.init(Cipher.java:1348)
    at javax.crypto.Cipher.init(Cipher.java:1282)
    at net.imcore.AES256Cipher.AES_Encode(AES256Cipher.java:28)
    at net.imcore.Aes256.main(Aes256.java:29)
    뜨길래
    32자리 코드를 16자리 바꿧습니다.
    String key = “abcdefghijklmnop”;
    그러고 나니 잘 컴파일 되네요.

    1. JAVA는 기본으로 암호화를 128bit만 기본지원하고 256bit부터는 별도의 파일을 JDK에 설치하셔야 합니다. 감사합니다.

  • 안녕하세요
    일단 먼저.. 정말 진심으로.. 매우 감사하다는 말씀 드리고 싶네요..

    이것때문에.. 일주일동안 얼마나 고생을 했는지..

    서버(java)와 안드로이드, 아이폰을 통신 하려고 하는데..

    계속 잘못된 인코딩 때문에.. 못하고 있었네요..

    정말 다시 한번 감사합니다.

    아 그리고.. 혹시.. C++용 또는 Standard C용으로는 작업중이신건가요??

    1. 답변이 늦었네요.

      준비중인데 벌써 2년째가 되었네요. 회사에서 프로젝트가 연달아서 진행되다보니 사이트 관리도 못하고 있네요.

      감사합니다.

  • 안녕하세요,
    좋은 포스트 글 감사합니다

    한가지 제가 궁금한게 있는데,
    키를 정하고

    암호화를 하였는데
    다음과 같은 값을 얻었습니다
    VFJ+zixx3u/G77hrMrWYvA==

    http 방식으로 파라미터에 넘겨 데이터를 전송해보려하는데
    = 과같은 특수 문자가 문제가 생겨서요, ^^;;

    = 를 임의로 문자 치환하면

    암호화 값을 고유하게 될 가능성도 낮아지는 거 같아서,

    암호화할때 +, /, = 과 같은 특수기호가 생성되지 않도록

    하려면 어느 부분을 건드려야 하는지 혹시 알려주실수 있나요?

    1. 답변이 눚었지만, 해당 특수문자는 BASE64로 한번 인코딩 하시면 됩니다 ^^
      물론 복호화 하실때는 BASE64로 디코딩 하셔야겠죠??

      감사합니다.

  • 안녕하세요.

    C 로 aes256 개발해야해서 이리저리 찾아보다 샘플 코딩 가능하실지 궁금해서 문의 드립니다…..

    지식없이 무작정 구현하려다보니 아무것도 모르겠네요..ㅠ.ㅠ

    염치없이 이렇게 글을 남깁니다..ㅠ.ㅠ

  • 소스 감사합니다.

    요 며칠간 imcore.net 사이트 접속이 안되던데, 무슨 일이라도 있었는지요?

  • 안녕하세요

    github 가입 후에
    git 사용법을 익히고자
    간단한 안드로이드 앱을 만들어서 푸시했는데
    (아직 기능 구현중)

    여기 블로그에
    AES256에 관한 코드를 활용하게 됐습니다.

    그래서 활용한
    주소를 남깁니다.
    https://github.com/Pina-Colada/TestProject

    물론 코드에도 저자 표시와 여기 블로그 주소를 주석으로 표기해뒀습니다.

    글쓴이 덕분에 쉽게 할 수 있었네요
    감사합니다.

  • 안녕하세요. 암호화 관련 좋은 내용 감사합니다.
    혹시 ASP 버젼에서 사용하는 방법은 없을까요?
    C#코드를 dll 등록하여 사용하는 방법이라도..부탁 드립니다.

  • 첨부해주신 C# 코드를 dll 등록하여 처리했습니다.
    공유해주신 소스코드 감사합니다..

  • 호스팅 서버라 dll 등록이 되지 않아서요..ㅠ
    ASP페이지 함수로는 어떻게 안될까요..ㅠㅠ

    1. 안녕하세요. 하로지니님.
      말씀하신 사항은 혹시 vb쪽 asp가 맞는지요?
      혹시 호스팅업체를 이용하고 계시는건가요?
      c#이라면 가능하실텐데 asp라면 단순 웹 페이지에서 사용하시는 건가요?
      좀 더 자세한 사항을 알려주시거나 작업하신 관련 소스를 보내주시면 제가 확인해볼 수 있을 것 같아요 ^^
      hosihito@gmail.com 으로 보내주세요.
      감사합니다.

  • 우선, 정말감사합니다. 다른 참조소스들 가져다 사용했을때 오라클의 AES256암호화 방식의 값과 다른 암호화 값이 나와서 엄청 애 먹고 있었는데요, 키 값의 문제인가 해서 봤는데 그문제는 아니었던것 같고, 어쨋든 이 소스로 인해 해결을 봤습니다. 오라클, 자바에서 암복호화하는 값이 딱! 일치 하는군요. 복 많이 받으세요 ^^

    1. 안녕하세요 Charles님.
      방문해 주셔서 감사드립니다.
      문제가 해결되셨다니 너무 다행이네요. ^^
      오라클 aes라이브러리가 java 포팅이였나 보군요.
      좋은 하루 되세요.
      감사합니다.

  • 암복호화를 하기 위해서 여기저기 찾는중에 여기까지와서 문의드립니다.
    AES256방식을 아래와 같은 환경에 적용할려고 하는데 오류가 발생을 합니다.
    해당 환경은 지원이 불가능한지 궁금해서여?

    환경
    Oracle : 9i
    JDK : 1.3
    시스템이 오래되다 보니 위와 같은 환경에서 해야 되는 상황이 발생하였습니다.
    위 환경을 이용하여 AES256으로 작업된 자바 Class파일을 Oracle로 올려서
    Oracle에서 SELECT 쿼리를 이용하여
    암/복호화를 할려고 합니다.

    자바 소스가 Oracle에는 올라가 지는데
    해당 자바 클래스를 Oracle에서 Function으로 만든 이후에
    SELECT문을 이용하여 호출 할려고 하면 아래와 같은 오류가 나오구 있습니다.

    Execution (7: 1): ORA-29532: 자바 호출이 잡혀지지 않은 자바 예외로 인해 종료되었습니다: java.lang.NoClassDefFoundError

    혹시 해결방법이 뭔가가 있는지 아시법 알려주셨으면 합니다.

    수고하세요.

    1. 안녕하세요. 밥알이님.
      우선 방문해 주셔서 감사드립니다.
      우선 해당 사항은 참조 AES 관련 참조 라이브러리도 컴파일 해야 할 것 같은데 찾지 못해서 생긴 오류같습니다.
      ORA-29532 에러도 광범위 해서 파일 퍼미션 에러, DB 커넥션 에러, 참조 라이브러리 에러 등등 다양하기 때문에 판단이 어렵습니다.
      오라클에서 직접 호출하기 전에 해당 오라클이 설치되어 있는 OS상에서 직접 class 파일을 실행시켜 보신다면 동작 확인이 가능할 것 같습니다.
      감사합니다.

  • 안녕하세요. 지금 자바와 c++간 통신하는데 AES256 방식을 사용하려고 하는데
    c++버전은 아직 개발중인가요? 여기저기 소스를 찾아봣는데
    암호화된 값이 맞지않네요.
    참조할 수 있는 소스 있으면 메일로 부탁 좀 드립니다.
    암호화 너무 어렵네요 ㅠㅠ

    1. 안녕하세요. sera님.
      문의 주셔서 감사합니다.
      C++같은 경우 C# 소스를 이용하여 DLL로 만들어서 사용하시면 됩니다.
      감사합니다. 좋은하루 되세요. ^^/

  • 저도 asp로된 aes 256 lib를 찾고있습니다.
    c# dll 등록하려했더니 안되서요 , 중국쪽 서버인데 등록이안됩니다. ㅠㅠ (여러가지이유)
    asp -> aspx -> cs로 하려하였더니 잘안되서요 ㅠ asp로 된 모듈은 없을까요 ?

  • AES암복호화 때문에 구글검색하다가 좋은 사이트를 알게되어서 너무 좋네요! 감사드립니다.

    한가지 물어볼것이 있습니다.
    ios,android 클라이언트에서 암호화된 url를 서버쪽으로 전송해서
    복호화시키는데요. ios에서 암호화 시킨건 복호화가 안되네요 ㅠ
    키값때문에 그러는지 알수 있을까요? 32바이트로 키값을 정해서 보내니깐 illgas key size에러 뜨는데요?

    1. 안녕하세요.
      illgas key size 에러 경우는 위쪽에 댓글을 찾아보시면 해결될 것 같습니다. ^^
      좋은하루 되세요. ^^/

  • 퇴근 후에 자바서버와 iOS/Android 앱 개발중인데 자바에서 AES256 암호화 찾기가 어려웠는데 좋은 자료 감사합니다. ^^

  • 당장 쓸일은 없어도..
    글 내용만 봐도, 글쓴이 분의 수고가 팍팍 느껴집니다.
    고생하셨습니다. 더 많은 분들에게 도움이 되었으면 좋겠네요 ^ㅁ^ //

    1. 안녕하세요. Dokenzy님.
      방문해주셔서 진심으로 감사드립니다.
      파이썬자료도 필요했는데 완전 다른분들께도 도움이 될 것 같아요.
      정말 감사합니다.

  • 14시간의 삽질을 종결시켜주셔서 대단히 감사합니다. ㅠㅠ
    근데 iOS encryption ->PHP서버로 POST send-> PHP decryption에서 iOS상의 “NSString *plainText”의 길이가 너무 길거나 너무 짧으면 PHP에서 decrypt를 못하네요. 혹시 이것과 관련되어 아시는게 있나요?
    iOS와 PHP코드는 모두 저 위에 있는 링크를 그대로 복.붙해서 사용했습니다.

    1. 실제 시도해본 예로:
      NSString *plainText = @”abcdefghijklmnopqrstu”를 가지고 Encrypt후 PHP로 보내면 PHP에서 decrypt가 안됩니다. 그치만 @”abcdefghijklmnopqrstv”를 가지고 하면 PHP에서 decrypt가 되네요. 왜 이러는지 아시나요?
      또한, @”ab”는 decrypt가 안되는데 @”ac”는 잘만됩니다. 왜이러는건지..아시나요?

      1. 답변이 너무 늦은 것 같아서 죄송합니다.
        혹시 xcode 버젼대와 php 버젼대를 알 수 있을까요?
        환경의 차이일수도 있고요.
        오늘도 좋은 하루 되세요.
        감사합니다.

  • 암복호화 건으로 자료 찾고있었는데 만은 도움이 되었습니다. 감사합니다.

    그런데 한가지 의문점이 있어 문의드리고자 합니다.
    “PHP 5.2 이하 버젼 openssl 미지원시 mcrypt 사용버젼”의 소스를 보면
    $output = mcrypt_encrypt (MCRYPT_RIJNDAEL_128, $key, $value, MCRYPT_MODE_CBC, str_repeat(chr(0),16));
    위와 같이 되어 있는 것을 확인할 수 있었습니다.

    그런데 AES-256을 적용하려면 아래와 같이 변경이 필요한것은 아닐까 합니다.
    $output = mcrypt_encrypt (MCRYPT_RIJNDAEL_256, $key, $value, MCRYPT_MODE_CBC, str_repeat(chr(0),32)) ;

    //참고: 16bit = 128 / 8
    //참고: 32bit = 256 / 8

    이렇게 되면 16비트로 되어 있는 부분의 소스를 32로 변경이 필요할 것 같기도 하고요.

    문외한 이라 잘못된 질문과 의견을 드렸을지도 모르겠습니다.
    다시한번 자료 감사드립니다.

    1. 안녕하세요. 작두탄무당님.
      많은 도움이 되셨다니 다행입니다.
      말씀하신 사항이 맞습니다. 16키와 32키를 기준으로 128/256 bit를 구분하시면 됩니다.
      해당 소스가 아마도 3년(?)전에 올려놓은거라 기억이 잘 나지는 않지만 아마도 그 부분은 확인하지 못하고 올린 것 같네요.
      좋은 지적 감사드립니다.
      언제든지 의견 있으시면 부탁드립니다. 초보자의 자세로 듣겠습니다 ^^
      오늘도 좋은 하루 되세요
      감사합니다.

  • 안녕하세요. 우선 좋은 모듈 제공해주셔서 감사합니다.^^

    제가 php로 암호화를 했는데 IOS에선 복호화가 잘되는데 자바와 자바스크립트로 복호화가 되질 않습니다 ㅜㅜ

    자바에선 BadPaddingException: Given final block not properly padded
    자바스크립트에선 Uncaught Decryption error: Maybe bad key
    라고 에러가 나는데요 ..

    php 에서 전달받은 key는 kOX2pLRcNF3WCrc6
    value 는JATt/DAFZVknyyJNiscWDjmqPfWXhLCkmuaWSwxFsaqfV/LCK5A3vpAN0ldWxzVDDtDKxXQLn3UgCgbZ3dHSKQ== 입니다.

    어떻게 하면 될까요? 조언부탁드립니다!

    1. 안녕하세요. 안드님.
      방문해주셔서 감사드립니다.
      제 생각으로는 php에서 사용하신 키가 kOX2pLRcNF3WCrc6 라고 하셨는데 16자리네요?
      그럼 128bot 방식으로 인코딩 하신거고요. 자바스크립트에서는 아마도 256bit로 디코딩 한게 아닐까 생각됩니다.
      php 버젼에 따라 openssl 방식으로 인코딩을 하셨는지 혹시 원문에 한글과 특수문자가 사용사용됐는지 정확한 정보가 필요할 것 같습니다.
      만약 좀 더 정확한 확인이 필요하시면, 실제 사용하신 php소스와 html 파일 소스를 샘플로 보내주시면 확인해드리겠습니다 ^^
      deepact@deepact.com 보내주세요.
      감사합니다.

  • 자바스크립트 버전을 다운받아 해봤는데요..

    내용중에 “한글을 테스트합니다.” 가 있는데요 이거 암호화 된거가지고
    Decode 하면 에러가나는데 왜그럴까요?

    3lguAaRAh+cTQtN6nMZWao5N0oLuZDaeASNv/Vz3p60tBniI10RWhvgwNHx8i2V4 uNhsCVxN+PZIPV+ufFMnHg==
    이 내용을 decode하면 오류가 발생합니다.

    1. 안녕하세요.
      미루양님. 혹시 3lguAaRAh+cTQtN6nMZWao5N0oLuZDaeASNv/Vz3p60tBniI10RWhvgwNHx8i2V4 uNhsCVxN+PZIPV+ufFMnHg== 내용의 플레인텍스트는 어떤 내용인지 알 수 있을까요?
      그리고 암호하 하실때 키는 abcdefghijklmnopqrstuvwxyz123456(32글자)를 사용하셨는지요?
      물론 아시는내용이겠지만 간혹 128비트와 256비트 암호화 과정에서 Key길이를 틀리시는분들이 계셔서요. 128비트는 length 16, 256비트는 length 32 문자길이를 반드시 맞춰주세요 ^^
      확인 부탁드려요.

      오늘도 좋은 하루 되세요 ^^/

  • c샵 첨부된걸 dll 만들려고 하는데
    c샵 쪽은 잘 모르는부분이라
    dll생성한후에 서버에설치하려고 하면
    진입점을 찾을수 없다고 나옵니다.
    혹시 만들어둔 dll 파일있으면 보내주실수 있나요?
    가지고 있으시면 메일좀 보내주세요..감사합니다
    tltlppp@naver.com

    1. 안녕하세요. 미루양님.
      c#에 있는 걸 dll을 만들어서 c쪽에서 사용하실 목적이신가요?
      3년전에 포스팅할 때는 가지고 있었는데 찾아보고 있으면 보내드릴께요.
      참고로 소스보면 나와있는 내용이지만 System.Security.Cryptography 라이브러리를 사용한거라서 RijndaelManaged을 이용하여 dll을 작성하시면 될 것 같아요.
      구글검색을 이용하시면 많은 도움이 되실 것 같습니다.
      감사합니다. 좋은하루 되세요.

      1. ASP 에서 사용 하려합니다~
        자바스크립트로 암호화 해서 서브밋하고
        서버페이지에서 복호화 하려구요..
        암호화가 되기전에 서브밋을 하면 안되서요..
        이분야 쪽은 잘 몰라서요..c샵도 처음 한거구요..;;;;
        꽤 어렵네요.

        1. ASP.NET 버젼인가요?
          ASPX 버젼대라면 c# 과 동일하게 라이브러리가 제공될 것 같습니다만 그 이하버젼이라면 힘들 것 같습니다.
          정확한 버젼대가 어떻게 될까요?

    1. VBScript 이군요.
      아쉽게도 ASP는 자체적으로 AES를 지원하지 않기 때문에 XySSL 0.8 기반의 COM인 RyeolStringEncrypter.dll 파일을 설치해야 하는 것으로 알고 있습니다.
      저희 블로그에 업로드된 샘플파일로는 불가능할 것 같습니다.
      제가 검색을 조금 해보니 asp 관련해서 포스팅하신 분이 계신 것 같아 참고하시면 될 것 같습니다.

      http://blog.ryeol.com/31

      감사합니다.

  • 감사합니다..ㅎㅎ;
    여기 올라와있는 c#소스 가지고 dll을 어렵게 생성해서
    서버에 등록해서 사용했습니다.
    덕분에 오랫동안 해결하지 못한 일을 끝냈습니다.
    감사합니다..ㅎ
    …여기 글쓰기 방지 문자 쓰기 어렵네요…;;ㅋ 지금 8번째 시도중입니다.ㅋㅋ

    1. 고생 많으셨네요 ^^
      해결하셨다니 너무 다행입니다.
      그리고 글쓰기 방지는 저도 어렵네요 ^^;;;;;;;;;
      예전에 스팸글 등록이 하루에도 몇천건 등록되었는데 이걸하고나서는 다행이도 한건도 발생하지 않는답니다 ^^/
      금주도 좋은 일 가득하세요.

    2. 미루양님 저도 VBScript 환경에서 aes256 암호화 해야하는데요
      정보좀 공유해주시면 안될까요??
      rkdheo82@naver.com
      프로그래밍 초보라서 암호화 관련 너무 어렵네요.

  • java쪽에서는 iv를 new IvParameterSpec(key.substring(0,16).getBytes()); 이렇게 쓰는데 (key는 32자리 key입니다.) javascript쪽에서 맞춰주려면 iv와 padding을 어떻게 맞춰줘야 하나요..?

    1. 안녕하세요. chie님.
      방문해주셔서 감사합니다.
      말씀해주신 부분을 보면 java쪽에 iv를 키 값을 기준으로 0번째에서 16자리를 잘라서 byte화 시켰네요.
      AES256 기준으로 보면 key length 32 이니, 절반을 잘라서 앞쪽 16자리를 byte화 해서 iv로 설정하면 될 것 같습니다.
      javascript aes 소스(gibberish-aes.js)를 살펴보시면 233, 258번째 라인을 수정하시면 될 것 같네요.

      위 내용은 그냥 막 생각나는데로 짠 로직이긴 한데 테스트는 안해봤지만 아마도 될 것 같은 예감이… ^^;
      좋은 하루 되세요~

      1. 답변 감사합니다.
        저는 iv에 하드코딩을 했었는데..ㅎㅎ
        알려주신 소스를 사용했을 때 값이 변경돼서 나오긴 하는데
        java에서 imcore.net 을 암호화하면 결과가 6agvBCuwsX0ZN6pVsBseOQ== 이렇게 나오고 자바스크립트에서 하면 YNSv10jYY5ODnM6LtNs7gA== 요런 값이 나옵니다.
        iv 이외에는 수정할 곳이 없는건가요?
        자바에서 IvParameterSpec 이 역할은 뭘 하는건가요?

        근데 자동입력방지 코드 정말 어렵네요ㅠㅠ
        똑같이 쓴거같은데 계속 틀렸대요 아오..

        1. 자동입력방지 코드는 저도 자주 틀려요 ㅋ
          그런데 이 기능 하나로 스팸을 100% 막고 있어요~ 실보다 득이 많아서요.
          불편을 드려서 죄송해요~
          좋은 하루 되세요~~~

      2. 어머.. 키값을 계속 다른 걸 넣고 테스트 하고 있었어요ㅎㅎ
        동일한 키 넣고 다시 테스트 하니 잘 되네요 (쑥쓰럽….)
        도움주셔서 감사합니다!
        좋은 하루 되세요~ 🙂

  • 좋은 자료 감사합니다.ㅎㅎ 안드로이드와 php에서 사용하고 있습니다
    조만간 ios에도 쓸 예정이에요~

    1. 안녕하세요. DEVSIGN님 ^^
      아임코어에 방문해주셔서 감사드립니다.
      적용해보시고 어려운 부분이 있으시면 저희가 최대한 지원해드리겠습니다.
      좋은 하루 되세요.
      감사합니다.

  • 좋은 자료를 올려주셔서 감사합니다.
    정말 유용하게 사용하고 있습니다. ㅎㅎ

    좋은 하루 되세요 ^^

    1. 안녕하세요. 작은악마님.
      방문해주셔서 감사드립니다.
      적용에 있어서 어려운 부분이 있으시면 언제든지 문의주시면 저희가 아는 범위내로 최대한 지원해 드리겠습니다.

      오늘도 좋은 하루 되세요 ^^/

      감사합니다.

      1. 안녕하세요 초보 개발자입니다.

        사용법을 잘모르겠어서 질문드립니다.
        C#샘플 받아갔습니다.

        AES256Cipher aes = new AES256Cipher ();
        string encrypt =aes.AES_encrypt (“Min”, “test”,bytesToEncode);
        이렇게 사용했는데

        CryptographicException: Key size not supported by algorithm
        이에러가 납니다… 해결방법을 알수없을까요 ?

        1. 안녕하세요 조민환님.
          방문해주셔서 감사합니다.
          해당 에러는 key size에 관한 에러입니다.
          key 길이를 16자리 또는 32자리를 반드시 사용하셔야합니다.
          16자리는 AES 128bit, 32자리는 AES 256bit 입니다.
          감사합니다.

  • 안녕하세요~ C#으로 AES256 암복호화 관련해서 궁금한 사항이 있습니다..

    패딩이 잘못되었으며 제거할 수 없습니다라고 나오는 오류는

    대부분의 원인이 어떤것들이 있을까요??

    1. 안녕하세요 수현님.
      우선 방문해주셔서 감사합니다.
      문의해주신 사항으로는 대부분 라이브러리 load 하는 과정해서 생기는 에러입니다.
      정확한 에러를 캡쳐해서 보내주시면 좀 더 상세한 답변을 드릴 수 있을 것 같습니다.
      감사합니다.

  • Javascript와 JAVA 간 암복호화 소스가 필요해서 찾게 되었습니다.
    좋은 자료 감사합니다 ^^

    1. 안녕하세요 seongyunism님.
      방문해주셔서 감사합니다.
      도움이 되셨다니 다행입니다. ^^
      행복한 하루 되세요.

      감사합니다.

  • C++용은 언제쯤 가능할까요?

    서버쪽은 제공해 주신 라이브러리를 적용 했는데.
    클라이언트를 C++로 개발 해야 해서
    부득이 Crypto++을 사용 했더니 결과 값이
    상이하게 나오네요.

    부탁드리겠습니다.^^

    1. 안녕하세요 흐르는강물처럼님.
      방문해주셔서 감사합니다.
      사용하신 Crypto++에 IV 부분을 16자리 모든 byte를 0으로 셋팅하시면 같은 결과값이 나올 것 같습니다.
      그리고 최종적인 값은 base64로 인/디코딩 되기 때문에 라이브러리에 따라서 간혹 결과값이 상이할 수 있으니 참고 바랍니다.
      도움이 되었으면 좋겠네요 ^^

      좋은 주말되세요. ^.^/

      감사합니다.

  • 좋은정보 정말 감사합니다. ^^
    그런데
    org.apache.commons.codec.binary.Base64
    에 약간의 버그가 있습니다.
    버그라고 하면 버그고 아니라고 하면 아닌것인데..

    Base64.encodeBase64String 을 사용했을경우
    줄바꿈이 들어가서 출력이 됩니다.
    간혹 한줄로 떨어져야 하는 곳엔 이것이 버그가 되어버립니다.

    그래서
    org.apache.xmlbeans.impl.util.Base64 클래스의
    new String(Base64.encode(encryptedValue)) 을 사용했더니…
    줄바꿈현상은 없어졌는데..
    타코드와의 호환성이 없어진듯합니다.

    해결할수 있을까요? ^^

    제가 테스트한 문자열입니다.
    asdfasdfasdfasdfasdfasdfasdf!#$!#$@#$%^#$%&^$%^&$%^&$%^&$%^&$%^&12341234123>?><??M?

    1. 안녕하세요. 김경림님.
      방문해주셔서 감사합니다.
      우선 아래의 방법으로 진행해보시는걸 권장해드립니다.

      – 아 래 –

      ——————————————-
      테스트 해보시고 다른 문의사항있으시면 언제든지 방문해주세요 ^^/
      좋은 하루 되세요.
      ////////////////////// 새해 복 많이 받으세요.

  • 안녕하세요 저는 안드로이드에 적용시키려고 하는데요ㅠ_ㅠ
    java_jdk6_security.zip 이 파일을 어디다가 넣어야하죠??
    저 파일 없이 예제소스코드를 적용시켜보니 에러는 안나는데 함수같은게 다른 거더라구요 도와주세여!

    1. 안녕하세요. 이동연님.
      java의 AES256 암호화 알고리즘 같은 경우 미 통상법에 의해 자국내에서만 AES256 방식이 허용되어 있습니다.
      그래서 128bit 알고리즘은 기본 지원하지만 256bit 암호화 알고리즘은 별도의 패치 작업을 해줘야합니다.

      해당 security 파일을 java가 설치된 디렉토리에 libsecurity 에 압축을 풀어 덮어씌우시면 됩니다.
      예를들면 C:Program FilesJava 1.6.0libsecurity 라고 볼 수 있습니다.

      감사합니다.

  • 안녕하세요. 좋은글 잘봤습니다.
    시간이 많이 흘러서 댓글을 확인하실지 모르지만 Javascript쪽 암호화에 대해 질문이 있습니다.
    다운받은 소스를 그대로 사용하면 문제가 없는데, key를 변경하면
    ‘Uncaught Decryption error: Maybe bad key’ 오류가 발생합니다.
    256비트 암호화를 테스트 중이라서 key의 길이는 32비트로 주었습니다.
    샘플 key(‘abcdefghijklmnopqrstuvwxyz123456’) => 정상동작
    변경 key(‘abcdefghijklmnopqrstuvwxyz123450’) => 오류
    기존 key에서 한글자만 변경을 해도 오류가 발생하는데 어떤 이유일까요
    답변 기다리겠습니다. 고맙습니다 ^_^/

    1. 안녕하세요 AIR님.
      우선 방문해주셔서 감사합니다.
      에러나는 이유는 당연합니다.

      사용하신 예제를 살펴보면

      위 항목을 주석처리 후 실행 해보시면 아마 이불킥~! 하실꺼라고 확신합니다 ^^/
      좋은 하루 되세요 감사합니다.

      1. DEEPACT Inc.님 빠른답변 감사드립니다.

        encode쪽만 계속 보면서 어디가 문제일까 고민했었네요. ㅜㅜ
        2016년은 이불킥하면서 시작합니다.. ㅋㅋ

        새해 복 많이 받으세요!!

  • 안녕하세요~
    올려주신 자료덕분에 javascript JAVA 간 RSA , AES 암호화를 정상적으로 적용하였습니다. 감사합니다^^

    궁금한 점이 한가지 있는데, AES 복호화를 할때 가끔씩

    java.lang.IllegalArgumentException: Empty key
    at javax.crypto.spec.SecretKeySpec.(DashoA13*..)

    에러가 나더라구요

    AESKey = encryption.decodeRSA(id, i_aesKey);
    UserId = encryption.decodeAES(i_sUserId, AESKey);
    Password = encryption.decodeAES(i_sPassword, AESKey);

    원인은 AESKey 가 null 인 경우로 추정되는데, 그럴 확률이 적다고 생각이 되서요;;
    다른 문제가 될만한 부분이 있을까요?
    도움 부탁드립니다 ㅠㅜ

    1. 안녕하세요. 목마른사슴처럼님.
      방문해주셔서 감사합니다.
      해당 오류는 key가 존재하지 않을 때 발생하는 오류가 맞습니다.
      작성하신 code를 기준으로 AESKey에 대한 검증이 필요합니다.
      가끔씩 에러가 발생한다면 분명 id나 i_aesKey 값이 제대로 전달되지 않아 AESKey가 복호화 되지 않아서 라고 판단됩니다.
      id와 i_aesKey의 log를 출력하여 에러 발생시까지 디버깅해보시면 될 것 같습니다.
      간혹 파라미터 전달이나 세션만료로 인한 변수 초기화가 원인이 될 수 있습니다.
      java에 프레임워크를 사용하신다면 정말 드물지만 out of memory로 인한 변수 초기화나 가비지 관련 문제가 발생할 수도 있습니다.
      이점 참고 부탁드립니다.
      감사합니다.

  • 안녕하세요.
    암복호화 관련해서 자료를 여기저기 찾다가 이곳까지 흘러왔네요 ㅡㅡ
    제가 이쪽분야에 전혀 몰라서 문의좀 드릴까해요

    현재 PHP로 프로그램을 진행하고 있습니다.
    근데 외부사이트의 API를 연동을 하는데요
    API 를 체크를 해보면 복호화가 올바르지 않다고 하네요.
    확인해보니 외부업체에 보내온 자료를 보면
    암호화 알고리즘에서 자료를 보내왔는데. 님께서 링크걸어주신거를
    사용해도 되는건지요?

    암호화알고리즘: AES256 + CBC + PKCS5
    암호화키 : XXXXXXXX
    IV : XXXXXXX
    문자인코딩 : UTF-8
    암호화출력 : HEX
    테스트 암복호화 문자열
    -입력문자열 : A123456
    -암호화 문자열 : F6370AEE7E2470EC70692C992F00CCC4
    위 내용처럼 자료가 넘어왓네요
    도대체 어떻게 보라는건지, 어떻게 하라는건지 ㅡㅡ 도통알수가없네요
    문자열 a123456하면 암호화가 된것이 F6370AEE7E2470EC70692C992F00CCC4 을 나타낸다는것인지….

    위 정보만으로 어떤내용이신지 아신다면 알려주실수있으신지요.

    1. 안녕하세요.
      물론 사용하셔도 되지만 작성해주신 내용을 살펴보면 암호화키 길이와 IV길이가 다르기 때문에 문제가 발생합니다.
      본 사이트에서 통합으로 올려놓은 암호화 라이브러리는 위와 같은 알고리즘을 이용 하므로 알고리즘 자체는 동일합니다.

      감사합니다.

  • 안녀하세요~ 올려놓으신 소스 참고하여 정말 잘 쓰고 있는 중입니다. 헌데 C# 쪽 사용중에 문제가 있어서 염치 불구 하고 질문 올립니다.
    c# 2.0의 상위 버전에서는 모두다 같은 결과 값이 나오는데요 (암호화 한 결과값)
    이렇게 나온 결과값은 자바에서도 복호화가 가능합니다.
    헌데 C#1.1 에서 돌린건 반토막이 나서 결과값이 나오더라구요(암호화 한 결과값)

    하도 답답해서 이것저것 찾아보는중인데 혹시 C# 1.1은 32bit 용으로만 나온거라 다를수가 있을까요?

    1. 안녕하세요. 끙차영차님.
      방문해 주셔서 감사합니다.

      개발도구의 32bit의 지원여부 보다도 AES256 지원여부를 확인해보셔야 할 것 같습니다.
      JAVA에서도 Security 패치를 하지 않으면 에러가 발생합니다.
      C#에서도 하위버젼에서는 128bit까지만 지원하는지 확인해봐야할 것 같습니다.

      감사합니다.

      1. ^^ 저도 프로젝트 항상 진행하면서 실수하는 부분입니다.
        참고로 AES256의 표준지원을 하지 않는 이유는 미국에서 자국 이외의 나라에서는 128bit까지만 표준화로 사용하게끔 법으로 정해버렸습니다.
        어이가 없는거죠.
        그럼 좋은 하루 되세요 ^^

  • 안녕하세요.
    여기올려주신 암호화 모듈로 정말 많은 도움이 되었습니다.
    저는 java ->javascript 버전으로 개발을 진행을 하고 있는데요.
    인코딩시에 _ (언더바) 가 들어가면 디코딩이 진행이 안되고 키값 오류가 발생합니다. _ 없이 인코딩 디코딩은 문제가 없는데 _ 를 넣어서 자바에서 인코딩한 값과 자바스크립트에서 _ 인코딩한 값이 서로 다르게 생성이 되니 오류가 발생을 하는데 도통 이유를 모르겠습니다. 그렇다고 _ 와 같은 특수문자를 쓰지 못하게 막을수도 없는 상황이라 난감하네요.
    혹시 도움말씀이라도 주실수 있으실런지요.

      1. 답변 감사드려요…
        근데 저 문제도 있었는데 저도 찾아보고 해결 했는데요.
        이번껀

        java(스크립트가 아니고)에서 test_test 를 암호화 한 data를
        javascript 로 디코딩을 하면 키오류가 뜹니다.
        testtest는 오류가 나지 않는데요.

        그래서 java에서 test_test를 암호화 한 값이랑
        javascript에서 test_test를 암호화 값이랑 틀립니다.
        testtest 와 test_test 와 다른건 _ 라는 특수문자인데요. 이부분 땜에 인코딩 디코딩이 되지 않고 오류가 나서 골치가 아프네요.
        제가 암호화 모듈까지 수정하고 업데이트 할정도의 실력이 아니라서
        자꾸 이렇게 문의하니 참 죄송하네요…

        1. 안녕하세요. 윤경수님.

          현재 사용하고 계신 운영체제(OS), JAVA JDK 버젼, security 패치여부,
          작성하신 JAVA와 JAVASCRIPT의 소스부분을 적어주시면 어떤에러인지
          파악하는데에 도움이 될 것 같습니다.

          감사합니다.

  • 올려주신 jdk 버전이 1.6 인데 적용해야 할 jdk 버전이 1.7.0_51 이라서 오류가 났었나 봅니다.

    그래서 java 개발에 확인해보니 post 된 jar 파일을 패치할 경우 key 오류가 발생을 하여 검색을 해보니 같은 증상으로 문제를 해결했다는 local_policy/us_export_policy jar 파일을 적용한것으로 보입니다.
    ㅠㅠ

    적용된 jar 파일을 받긴 했는데 이것까지 봐주셨으면 하면 염치가 없는것이겠죠…
    그래도 많은 도움이 되었습니다. 일일이 답변도 달아 주시고..
    감사합니다!!

    근데 왜 특수문자가만 ㅜㅜ

    1. JDK 1.7 버젼은 http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html 에서 다운로드 받으셔서 적용하시면 됩니다.
      해당파일을 $JAVA_HOME/jre/lib/security 폴더에 local_policy.jar, US_export_policy.jar를 덮어씌우시면 됩니다.
      한글/한문/일본어/특수문자 등등은 암호화전에 UTF8인코딩 한번 하시면 에러발생을 최소화 할 수 있을꺼예요.
      행복한 하루 되세요.

      1. 안녕하세요. 해결 하였습니다!
        문제는 모듈이 아니라 쿠키였어요… 쿠키에서 특수문자를 허용하지 않아서 발생하는 문제…. 왜 그걸 빨리 생각을 하지 못했는지… 감사드립니다.. 안면이라도 있었으면 저녁이라도 했을텐데 아쉽네요. 건강하시고 행복하세요!!

  • 매우 고맙습니다.
    sqlserver와 c#호환 되도록 만들어봐야 겠습니다.

    복 받으실껍니다 ㅎㅎ

  • PHP LogoPHP Version 4.4.8

    php 소스로 이용하려고하는데

    Fatal error: Call to undefined function: openssl_encrypt() 이렇게 나오는데요

    위 버전에서는 지원이안되는건가요??

    1. 안녕하세요. 개발자님.
      해당 오류는 php에 openssl 관련 라이브러리가 없는것으로 보입니다.
      php.ini에 extension=php_openssl.dll 또는 extension=php_openssl.so 를 추가해주셔야 합니다.
      하지만 신뢰성 있는 암복호화 모듈을 사용하기 위해서는 5.x 버젼 이상을 권장해 드립니다.
      감사합니다.

    1. 궁금님 안녕하세요.
      방문해주셔서 감사합니다.

      C++같은 경우 C# 소스를 이용하여 DLL로 만들어서 사용하시면 됩니다.

      감사합니다.

      감사합니다. 좋은하루 되세요. ^^/

        1. C++의 경우는 C#의 소스를 DLL로 등록하셔서 사용하시면 되고,
          C의 경우는 openssl/aes.h 을 include를 하시고, IV 값을 모두 0x00로 셋팅하시면 될 것 같습니다.
          저희 개발팀도 C 관련 암호화 모듈은 openssl를 그대로 사용합니다.
          AES256 C 관련 소스를 참고하시면 될 것 같습니다.

          감사합니다.

  • 소스제공에 진심으로 감사드립니다. 위에 댓글을 모두 다 읽어봤는데요.
    저는 아이폰 앱을 aes256과 관련된것을 만들어 전세계 출시를 하고자 하는데
    댓글 내용중에

    참고로 AES256의 표준지원을 하지 않는 이유는 미국에서 자국 이외의 나라에서는 128bit까지만 표준화로 사용하게끔 법으로 정해버렸습니다.

    –> 이런내용을 보았습니다. 미국에서 법으로 자국 이외의 나라는 256비트를 못쓴다고 하시는데 그럼 미국만 앱 출시는 256으로 하고 미국외에 나라들 한국, 중국, 일본, 유럽등의 나라는
    128비트로 개발을 해서 출시를 해야 하는건지요?

    1. 안녕하세요.
      방문해주셔서 진심으로 감사드립니다.
      오해의 소지가 있을 수 있겠습니다. ^^;
      “256비트를 사용할 수 없다”가 아니라 “사용할 수 있지만 널리 알리지는 말아라” 의 표현이 적당할 것 같습니다. 표준은 자국(미국) 내에서는 256비트를 표준화 정책으로 세워 놓고 정작 다른 나라에서 쓰는게 마음에 들지 않을 뿐입니다.
      그렇기 때문에 Sun의 JDK 역시 기본으로 설정되어 있는 것도 128bit 이며, 이는 정식으로 지원하는 패치를 통해서 해결이 가능합니다.

      결론적으로 말씀드리면. 쓰면 불법이다 라는게 아니라 쓰면 우리가 불편하다. 라는 표현이 적절할 것 같습니다.

      얼마든지 256bit 알고리즘을 이용하여 개발하셔도 상관없습니다. ^^/

      그럼 오늘도 행복한 하루 되세요.
      감사합니다.

      1. 답변 너무 감사드립니다. 그리고 제공해준 소스는 텍스트에 대한 암호화만 가능한거 같은데요.. 혹 이미지나 이런것도 지금 주신 소스를 응용해서 암호화가 가능한지 여쭤보고 싶습니다.

        1. AES, DES, SEED 등등 암복호화 라이브러리들을 사용하시면 기본적으로 바이너리(=byte) 방식으로 입출력 되기때문에 이미지, 동영상, 문서 등 모두 암복호화가 가능합니다.
          진행과정을 살펴보면
          1. Text형식의 문자열의 경우: text->byte->aes256(암호화)->base64(인코딩)

          2. 파일 형태의 객체의 경우: File->InputStream->byte->aes256(암호화)->OutputStream->File(암호화 된 파일)

          복호화는 역순으로 보시면 됩니다.

          그럼 오늘도 행복한 하루 되세요. ^^

          감사합니다.

  • 안녕하세요. 암호화 관련하여 많은 도움을 얻었습니다. 감사합니다.

    다름이 아니라 C언어로 AES128 구현된 시스템에서 암호화된 데이터를 C#으로 AES128 구현된 시스템에서 받아 복호화해서 DB에 저장하려고 하는데요.
    그럴려면 AES256 구현방법처럼 C언어로 구현된 소스에서 KeySize, BlockSize, Mode, Padding, Key, IV 가 어떻게 설정되었는지를 알고 거기에 맞춰서C# 으로 구현해야 하는지 해서요.
    KEY : 1234567890123456
    DATA : QAZWSXEDCRFV
    암호화 데이터 : 0x1E 0x5B 0xAE 0xF1 0xBD 0x5D 0xCD 0x47 0xED 0x68 0x4F 0x9A 0x57 0x40 0xD2 0xB7
    이런 암호화 데이터가 넘어오면 C#에서 어떻게 0x1E 0x5B 0xAE 0xF1….. 이런데이터를 복호화 해야할지 궁금해서 문의 드립니다.

  • C#에서 암호화 데이터를 BitConvert를 이용해서 16진수로 나타낼 수 있을거 같은데 1E 5B AE F1 BD 5D………. 이렇게 동일하게 나오질 않네요. 이것이 key값, IV값 등이 달라서 안나오는 걸로 볼 수 있나요? 아.. 넘넘 힘이드네요

    1. 안녕하세요 AESMAN님.
      방문해주셔서 감사합니다.
      말씀하신대로 Key값과 IV값에 따라서 출력값이 다릅니다.
      이전에 질문해주셨던 C에서의 결과값을 Byte->base64로 인코딩 해주시고, 그 값을 DB 넣으시면 됩니다.
      그리고 복호화시에는 DB데이터->base64 복호화->byte 복호화 = 최초 데이터의 순서로 진행하시면 됩니다.
      도움이 되셨으면 좋겠네요.
      참고로 아시는 내용일 수 있으나 128bit의 key값은 16byte, 256bit는 32byte의 길이로 하셔야 합니다.

      감사합니다.

    1. 안녕하세요. 김한량님.
      방문해주셔서 감사드립니다.
      유용하게 쓰였다니 저희도 기쁘네요 ^^
      문의사항 있으시면 언제든지 글 남겨주세요.

      감사합니다.

  • 안녕하세요 자료 잘 봤습니다.
    코드를 가져다가 사용해보니 잘 되지 않는 부분이 있어서 질분드립니다.

    js -> java로 암호화된 키를 전송하는 부분을 만들고 있는데

    js에서 암호화 한 것으로 java로 복호화 하니

    java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64String([B)Ljava/lang/String;

    이런 에러가 발생했습니다.

    그래서 확인해 보니 “abcde”라는 문자열을 암호화 한 값이

    java : a04f55b85f38b2ed4a466c0d62d64853
    js : oE9VuF84su1KRmwNYtZIUw==

    이렇게 다르게 나옵니다.

    이게 어떤 문제인지 알 수 있을까요?
    지금 이틀째 보는데 알 수가 없네요…..

    1. 안녕하세요. 윤정훈님.
      반갑습니다 🙂

      우선 java.lang.NoSuchMethodError의 에러는 java에 Base64 라이브러리를 추가하시면 해결될 것으로 보여집니다.
      해당 라이브러리는 https://commons.apache.org/proper/commons-codec/download_codec.cgi 에서 다운로드가 가능할 것 같습니다.
      라이브러리 추가 후에도 같은 문제가 발생한다면 글 남겨주세요.

      행복한 하루 되세요.

      감사합니다.

  • 죄송합니다… 다시 확인해보니 암호화된 값은 oE9VuF84su1KRmwNYtZIUw== 로 같은데

    javascript에서 보낸 이 값을 java에서 복호화 하려고 하면

    org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.decodeBase64(Ljava/lang/String;)[B

    이런 오류가 발생합니다.

    1. commons-codec-1.10-bin.tar.gz 를 다운 받으시고 압축을 푸신후에 commons-codec-1.10.jar 파일을 jdk 라이브러리 경로에 넣거나
      메이븐을 사용하시면 pom.xml 에

      와 같이 추가하시면 됩니다.

      1. 빠른 답변 감사합니다.

        기존에 codec을 1.4를 썼는데 말씀하신데로 올렸는데 같은 에러가 발생합니다.

        신기한게 java에서 인코딩하고 java에서 디코딩하면 이런 에러가 발생하지 않는데

        js에서 인코딩한것을 받아서 그대로 디코딩하려고 하면 발생하는 에러입니다.

        1. 그렇다면 혹시 정확한 작업환경을 알 수 있을까요?

          예) jdk7 + windows + eclipse + tomcat + jquery 1.11 등등….

          그리고 자바스크립트에서 abcde로 암호화 했을 때 사용한 Key 도 알려주세요.
          테스트 하면 금방 SSG(쓱~~~~~~~) 하고 나올 것 같습니다 ^^/

          1. 환경 : JDK 7 + windows + eclipse luna

            js 코드
            var key = “abcdefghijklmnopqrstuvwxyz123450”;
            ajax(“exportRequest.json”, “jsonParam=” + AES_Encode(“abcde”));

            java코드
            String key = “abcdefghijklmnopqrstuvwxyz123450”;
            System.out.println(tmp);
            String decodeText = AES256Cipher.AES_Decode(tmp, key);
            System.out.println(“AES256_Decode : “+decodeText);

            입니다.

            단순 코드인데 왜 안되는지 모르겠네요….

          2. 그리고 자바에서 받는 부분은

            String tmp = request.getParameter(“jsonParam”);

            입니다.

          3. 테스트 하다 보니까…. js -> java가 문제가 아니라

            main에서 실행하면 잘 되는데…
            url로 호출해서 들어가면 에러가 발생합니다.

            public static void main(String[] args) throws Exception{
            String key = “abcdefghijklmnopqrstuvwxyz123450”;

            String plainText;
            String encodeText;
            String decodeText;
            // Encrypt
            plainText = “abcde”;
            encodeText = AES256Cipher.AES_Encode(plainText, key);
            System.out.println(“AES256_Encode : “+encodeText);

            // Decrypt
            decodeText = AES256Cipher.AES_Decode(“oE9VuF84su1KRmwNYtZIUw==”, key);
            System.out.println(“AES256_Decode : “+decodeText);
            }

            /**
            * 반출요청
            * @param locale
            * @param model
            * @param request
            * @return
            * @throws Exception
            */
            @RequestMapping(“/exportRequest”)
            @ResponseBody
            public String exportRequest(Locale locale, Model model,HttpServletRequest request) throws Exception {

            String tmp = request.getParameter(“jsonParam”);

            String key = “abcdefghijklmnopqrstuvwxyz123450”;

            String plainText;
            String encodeText;
            String decodeText;
            // Encrypt
            plainText = “abcde”;
            encodeText = AES256Cipher.AES_Encode(plainText, key);
            System.out.println(“AES256_Encode : “+encodeText);

            // Decrypt
            decodeText = AES256Cipher.AES_Decode(“oE9VuF84su1KRmwNYtZIUw==”, key);
            System.out.println(“AES256_Decode : “+decodeText);

            System.out.println(“################################”);

            System.out.println(tmp);
            String decodeText2 = AES256Cipher.AES_Decode(tmp, key);
            System.out.println(“AES256_Decode2 : “+decodeText2);

            // JSONObject param = decrypt(tmp);
            // System.out.println(param.toString());

            return “aaaaa”;
            }

          4. String tmp = request.getParameter(“jsonParam”);
            에서 jsonParam값은 javascript에서 혹시 encodeURIComponent(값)을 하셨나요?
            특수문자 때문에 에러가 발생할 수 있어요.

          5. 코드를 보시면… request에서 받는것과 상관없는 부분에서 에러가 발생합니다… ㅠㅠ

          6. 제가 지금 직접 서블릿 프로젝트와 Spring Framework MVC 모델형식으로 ajax data 전송을 통한 암호화를 진행해 봤지만
            에러는 발생하지 않네요. 결국 기존에 어딘가 존재하는 base64 라이브러리와의 충돌이 예상됩니다만…
            뭔가 시원한 답변을 드리지 못해서 죄송하네요 ㅜㅜ

          7. 확인 감사합니다….

            그럼… 혹시 테스트 하신 코드 좀 받아 볼 수 있을까요?

            부탁드립니다.

          8. 샘플 프로젝트 파일을 압축해서 올려드립니다 ^^;

            테스트 환경 = Mac OSX El Capitan + JDK8 + Tomcat8 + Eclipse Mars.2 Release (4.5.2)
            프로젝트 종류 = Dynamic Web Project + Web Module version 3.1

            Sample Project download

            Spring Framework MVC 테스트 파일은 회사의 내부적인 설정이 많아 드리지 못한 점 양해 부탁드립니다.

            감사합니다.

          9. 왜 그런지는 모르겠는데 maven으로 되어있는 것을 직접 파일을 넣고 build path에 올렸더니 되네요…. 친절하게 답변해 주셔서 감사합니다. ^^

          10. 메이븐 참 편한데 가끔 삐꾸(?)같은 짓을 해서 저희 회사에서는 메이븐을 사용하지 않고, ant를 사용해요. ^^
            그럼 좋은 하루 되세요. 감사합니다.

  • 안녕하세요 운영자님,,인하공전컴시과다니는대학생입니다 다름이아니라 요번시스템보안 프로젝트과제로 기존자바 프로그램을 암호화 하여 발표하는게있는데 제가 초보라 어떻게하는지를 아예모르겠네요.. 사용방법좀 세세하게 가르쳐주시면 정말감사하겠습니다..ㅠㅠ 1학기때 자바 이클립스로 오목하는프로그램만든거있는데 그걸 암호화 하려고 합니다. 답변부탁드립니다 !!

    1. 안녕하세요. 방문해주셔서 감사합니다.
      미래를 책임지는 대학생이시군요 ^^/
      암호화는 생각보다 어렵지 않습니다. 오목 프로그램에서 어느부분을 암호화 하신다는건가요?
      소켓통신에서의 임호화가 예싱되긴하는데 맞을까요?

  • 제가 완전초보라., 어느부분을 어떻게 암호화해야하는지도모르겠습니다.. 교수님이 기존에 다른프로그램을 암호화 하라고 막연히만 말하셔서,,주제를 1학기자바시간에 이클립스를사용해 만들었던 오목프로그램을 사용하려한건데요 소켓통신으로 상대아이피 입력해서 하는 프로그램은맞습니다… 어느부분을어떻게해야할까요.,,, 아예갈피도 못잡고있어요,,, 자바 암호화 패키지를 사용하라고 들었는데 방법도모르겠구요., 답변 감사합니다..

    1. 우선 오목프로그램에 암호화 알고리즘이 정말 필요할까? 라는 의문이 먼저 드는건 저만의 개인적인 생각일까요? ^^; 아무것도 모르시는 상태라면 암호화 알고리즘의 정의와 방식 그리고 특징을 조금이라도 공부하셔야 알맞게 사용 할 수 있습니다.
      우선 시작이 어려우시다면 단방향(해쉬화),쌍방향(대칭키) 암호화 알고리즘부터 접근하셔야 할 것 같습니다. 해당 정보는 구글검색 엔진에서만 찾아도 너무 많고 자세히 나와 있습니다. 참고가 되었으면 좋겠네요.
      그럼 행복한 주말 되세요. 감사합니다.

  • 안녕하세요. ios 개발하고있는 학생입니다.
    현재 obj가 아닌 swift로 개발을 하고있습니다.

    iv 와 key가 있으며 서버는 16비트로 받고있습니다.

    궁금점은 obj 코드를 보니 iv를 고정시켜 놓는곳이 어디인지 모르겠으며, 16비트화를 먼저 해야하는지 아니면 암호화를 하고 16비트를 해야하는지는 잘 모르겠습니다.

  • 안녕하세요. obj가 아닌 swift로 개발하고있는 학생입니다.

    swift로 된 AES256는 없는건가요? 또한 암호화에서의 PKCS7Padding 과 PKCS5Padding의 차이점이 무엇인가요?
    또한 서버에서는 16비트로 받고있고 iv와 key가 있으면 iv는 어디에 고정을 시켜줘야하는건가요?
    obj로 되있는 것을 swift로 수정을 하고있는 중입니다.

    감사합니다. 또한, swift로 된 파일이 있으시다면 메일로 공유좀 부탁드립니다.

    1. 추가적으로
      pkcs5 와 pkcs7 차이는 블록 사이즈에 있습니다.
      PKCS5는 8-byte 블록 사이즈, PKCS7은 1 ~ 255 byte 를 가질 수 있습니다.
      감사합니다.

  • 안녕하세요 신입 개발자로 이제 막 새내기 입니다 ㅠㅠ
    뭐 하나 여쭈어보겠습니다!!
    http host 방식으로 안드로이드에서 서버로 암호화해서 보내려고하는데
    잘 안되네요.. 참조할 사이트나 꿀같은 조언 주시면 감사합니다

    1. 안녕하세요. JWO님.
      안드로이드 http 전송은 구글검색 조금만 하시면 우당탕~~~ 나옵니다 ^^
      키워드는 “android java http request example” 정도로 하시면 됩니다.
      감사합니다.

      새해 복 많이 받으세요. ^^/

  • 안녕하세요. 예제를 이용해서 PHP 시스템과 JAVA 시스템을 구현했습니다.

    같은 값을 JAVA에서 암호화하고 BASE64 인코딩한 값과

    PHP에서 암호화하고 BASE64 인코딩한 값이 다르네요..

    같게 맞추려면 어떤부분을 수정해야할까요?

    1. 안녕하세요.
      혹시 PHP의 버젼과 JAVA의 JDK 버젼이 어떻게 될까요?
      그리고 128bit 인가요 256bit 인가요?
      환경은 윈도우즈 인가요 리눅스 계열인가요?
      인코딩 텍스트가 영문인가요? 아님 한글 포함인가요?

      위와 같은 자세한 개발환경 정보가 있어야 원인을 파악할 수 있을 것 같아요~

      감사합니다.

  • 안녕하세요 C#에 대한 소스코드는 잘 보았습니다.
    제가 C#과 C에서 통신을 하려고 하는데 혹시 C에대한 코드는 없으신가요?
    openssl을 통해서 aes 256암호화를 하려고 하였는데
    패딩에 대한 문제가 많은것 같습니다.
    새해복 많이 받으세요

      1. 대답해주셔서 감사합니다.
        죄송한대 제가 배우는 학생 입장이여서 그런데 C에대한 예제 소스코드를 보내주실수 있으신가요?ㅠㅠ

        1. 현재 암호화 통합 라이브러리 2차 버젼을 준비하고 있답니다.
          구글 검색을 통한 c 예제 소스에서 IV값을 0으로 맞추신 후 사용하시면 가능할 것 같아요.

          감사합니다.

          1. 며칠 동안 못하다가 요새 새롭게 해봤을때 문제점을 찾았습니다.
            C언어쪽 base64 쪽에 문제가 있다는것을 알았고 해결했습니다.
            결국에는 인코딩이 제대로 되지않아서 패딩에 문제가 있었던것으로 착각했었습니다.
            저와 같은 실수하시는 분은 안계셨으면 좋겠네요.
            아무튼 친절하게 답변해주셔서 감사합니다.

          2. 해결이 되셨다니 다행입니다 ^^
            저희도 얼마전 C언어 쪽에서 BASE64 인코딩부분에 문제가 있었는데 저희랑 같은 현상인것 같네요~

  • 안녕하세요 올려주신 소스코드는 정말고맙게 잘쓰겠습니다.
    하지만 VB6에대한 AES256 암호화 내용은없네요.
    자바스크립트를 통해 VB6에서 작업을 하려고했으나 안되네요 ㅠㅠ 혹시 자료가지고 계시면 보내주셨으면합니다.

    참고로 PHP에서 AES로 해쉬한값과 구글에 떠돌아다니는 VB6 AES프로젝트 해쉬값이 달라요 ㅠㅠ

    1. 안녕하세요.
      방문해주셔서 감사합니다.
      VB에 대한 자료는 가지고 있지 않습니다만 혹사 버젼은 어떻게 될까요?
      2000 이상대 버젼은 닷넷 프레임워크를 사용하기 때문에 c# 소스를 포팅해서 사용하면 될 것으로 생각되지만 VB6이라면 조금 달라질 것 같네요.

      감사합니다.

    2. 추가적으로 인터넷에서 찾으신 소스에서 IV값과 salt값을 맞춰주시면 알고리즘은 동일하기 때문에 가능할 것 같습니다.

      감사합니다.

  • 세상에 2012 년에 남기신게 아직까지 많은 사람들에게 도움이 되고 있는게 엄청난 댓글들만 봐도 알수가 있네요 ㄷㄷ

    물론 저도 코어님 덕분에 골머리 앓고있던 문제를 쉽게 해결했네요

    매우 감사드립니다

    1. 안녕하세요. 망통님 ^^

      저도 소중한 댓글들로 해당 포스트를 옮기거나 지울 수가 없네요 ^^;
      도움이 되셨다니 다행입니다.

      행복한 하루 되세요.
      감사합니다.

  • javascript에서 암호화한걸 c#에서 받아서 복호화하려는데
    골머리 썩히다가 검색 중에 뙇!!!!
    많은 참고가 될것 같습니다~ 좋은자료 감사드립니다~

    1. 안녕하세요 웹디님.

      방문해주셔서 감사합니다.
      도움이 되셨다니 다행이네요.

      오늘도 행복한 하루 되세요~

  • 안녕하세요. 자바와 자바스크립드를 받아서 잘활용해보았습니다 ^ㅁ^
    감사합니다 ㅎㅎ
    그런데..혹시.. ASP부분은 없나요??’ㅁ’;;
    제가 초보자인데 솔루션안쓰고 제가 암호화작업을해야해서 찾는중인데 원하는것이 잘안보이네요 ㅜ_ㅜ

    1. 안녕하세요 이찡님.
      방문해주셔서 감사합니다.
      ASP의 경우 C# 코드를 dll 등록하여 처리하시면 됩니다.
      구글 검색어 예시는 다음과 같아요 ^^
      “ASP에서 C# 언어로 만든 DLL 호출” 또는 “asp dll 등록” …
      이 정도로 검색해보시면 등록이 가능하실 것 같아요.

      오늘도 행복한 하루 되세요~

  • 안녕하세요.

    혹시 javascript 부분에서 nodeJs를 사용해서 하는 방법은 혹시 없을까요??
    crypto 모듈을 사용해서요
    감사합니다..^^

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.