밀키 파일 업로드 관련 부분을 만들면서 인증된(?) 사용자만 업로드 가능하게 동작하는 부분이 필요했다.


우선 업로드 모듈은 https://github.com/blueimp/jQuery-File-Upload 를 사용하기로 했다.

서버를 노드js로 구현해놓은 부분이 있어서(https://github.com/blueimp/jQuery-File-Upload/tree/master/server/node) 파일 업로드 서버는 노드를 사용하기로 했다.



파일 업로더 부분은 나중에 따로 설명하기로 하고 돌아와서.

로그인 한 사용자에게만 파일 업로드 기능을 주기위해 어떻게 할까 하다가.

간단하게 밀키 로그인 사용자에게 암호화된 토큰을 쥐어주고 파일 업로드시 토큰값을 같이 넘기고

파일서버에서 암호를 풀어서 정상적인 토큰이라면 업로드 하게 하는 방법을 생각해 보았다.

(더 좋은 방법있으시면 제게 인사이트를 내려주세요 ㅠㅠ -  댓글 부탁드립니다 ^^)



1. 자바단에서 암호화 하기


import org.apache.tomcat.util.codec.binary.Base64;

import javax.crypto.Cipher;

import javax.crypto.spec.SecretKeySpec;


protected static String encrypt(String plaintext) {

    final byte[] KEY = {

            0x6d, 0x79, 0x56, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70,

            0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4b

    };


    try {

        SecretKeySpec aesKeySpec = new SecretKeySpec(KEY, "AES");

        Cipher cipher = Cipher.getInstance("AES");

        cipher.init(Cipher.ENCRYPT_MODE, aesKeySpec);

        return new String(Base64.encodeBase64(cipher.doFinal(to_encrypt.getBytes())));

    } catch (Exception e) {

        return null;

    }

}




2. 노드js에서 복호화 하기


var crypto = require("crypto"),

    iv = new Buffer(''),

    key = new Buffer('6d7956657279546f705365637265744b', 'hex'),

    decipher = crypto.createDecipheriv('aes-128-ecb', key, iv);


var decipheredPlaintext = decipher.update(encryptedString, 'base64', 'buffer');

decipheredPlaintext += decipher.final('buffer');




거의 아래의 참고링크들을 참조하였다. (아래 링크들 꼭 확인 부탁드립니다!!)

간단하게 구현을 하려다 보니... 이런 방식이 되어버렸는데..

이렇게 토큰 넘기는 것 말고 더 좋은 방법은 없을까? 좀 고민이 필요해 보인다.



참고 링크

http://stackoverflow.com/questions/19698721/encrypt-in-node-and-decrypt-in-java

http://www.powerbox.pe.kr/308

http://idkbj.tistory.com/100