728x90

암호화 / 복호화.
google code 의 as3 crypto 를 사용 했습니다.

간단하게 설명하자면 암호화가 필요한 데이터를 암호화 한 후에 (키를 사용) 통신 / 저장 하며 원할때 복호화 합니다.

사용된 것은 des-ecb 로 암호학을 배운적이 없으므로 패스합니다.
대표적인 암/복호화 알고리즘으로는 aes, blowfish, des, des3, rc4, xtea 가 있습니다.
as3 crypto 에 지원하는 암호화 알고리즘이 더 있지만 복호화를 같이 지원하는거는 저정도 인거 같습니다.

프로그래밍 흐름은 데이터 입력 -> 암호화 -> 암호화 출력 -> 복호화 -> 복호화 출력 이렇게 됩니다.

encDoc.as

package {
import com.hurlant.crypto.symmetric.ICipher;
import com.hurlant.crypto.Crypto;
import fl.controls.Button;
import fl.controls.TextArea;
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.utils.ByteArray;

/**
* ...
* @author Blanedil : aostols@gmail.com
*/
public class encDoc extends MovieClip{

private var ta1:TextArea;
private var ta2:TextArea;
private var ta3:TextArea;

private var button:Button;

private var text:ByteArray;

public function encDoc() {
ta1 = new TextArea();
ta1.width = 500;
ta1.height = 150;
ta2 = new TextArea();
ta2.width = 500;
ta2.height = 150;
ta3 = new TextArea();
ta3.width = 500;
ta3.height = 150;

addChild(ta1);
addChild(ta2);
addChild(ta3);
ta2.y = ta1.y + ta1.height;
ta3.y = ta2.y + ta2.height;

button = new Button();
addChild(button);
button.label = "GO!";
button.x = 550;
button.y = 300;

button.addEventListener(MouseEvent.CLICK, clk);
}

private function clk(event:MouseEvent):void {
var key:ByteArray = new ByteArray();
key.writeUTF("thestringforkey");
var aes:ICipher = Crypto.getCipher("blowfish-ecb", key, Crypto.getPad("pkcs5"));
text = new ByteArray();
text.writeUTFBytes(ta1.text);//dont use writeUTF();
aes.encrypt(text);
ta2.text = text.toString();

aes.decrypt(text);
ta3.text = text.toString();
}

}

}

TextArea를 3개 만듭니다. 1번, 2번, 3번이 있는데 1번은 원본, 2번은 암호화된 출력, 3번은 복호화된 출력을 하게 됩니다.
간단하게 만들어 두고 모든것들은 버튼을 눌렀을대 처리되게 됩니다.

중요한 요점은 ByteArray를 사용한 다는 것입니다. 모든 처리해야할 내용이 ByteArray이기 때문에 writeUTF() 나 .toString()을 사용합니다.
key가 의미 하는 것은 말 그대로 열쇠를 의미 합니다. key를 기준으로 암호화를 하게 되고 복호화 할 시에도 같은 키를 사용해야 정상적인 복호화가 됩니다.
getCipher를 사용하여 알고리즘을 정해 주는데 이 예제에서는 blowfish-ecb를 사용하였습니다.

ecb가 의미하는 것은 단일 블럭 암호화 어쩌구 하는데 자세히는 모름..

ICipher를 생성해 준 후 getCipher를 하여 암호화 객체를 만들어주고 원하는 데이터를 ByteArray를 만든 후 encrypt 해주면 됩니다.
이제 그 ByteArray를 출력(toString())해 주면 암호화된 문장을 얻을 수 있습니다.
이후 같은 암호화 객체로 decrypt를 해주게 되면 다시 복호화 할 수 있습니다.

*중요사항*
encrypt된 ByteArray의 경우 이대로 통신을 할 경우 캐릭터셋 문제로 인하여 정상적인 전송이 안될 수도 있습니다. 예를 들어 암호화 과정에서 EOF 등의 문자가 튀어나올 가능성이 있기 때문에(테스트 상 정상적인 전달 안됐음) 통신이나 DB에 넣으실 경우에는 다른 형태로 인코딩 하셔야 합니다. 사용해본 인코딩 방법으로는 HEX 나 BASE64 등의 방법이 있습니다.
인코딩 메소드 역시 as3 crypto에 포함되어 있으니 쉽게 사용하실 수 있습니다.

728x90

'Flex' 카테고리의 다른 글

FileReference.save 사용방법  (0) 2012.07.29
Flex RSL  (0) 2012.07.29
Flex Mysql 연동  (0) 2012.07.29
BlazeDS  (0) 2012.07.29
Flex 컴파일 후 익스플로러에서 적용이 안 될 때  (0) 2012.07.29

+ Recent posts