2014. 12. 4. 16:25

AES CBC 128BIT PKCS5 암/복호화(AS3)

As3Crypto 라이브러리를 사용한 암/복호화 (AES CBC 128BIT PKCS5)


package
{
	import com.adobe.crypto.MD5;
	import com.hurlant.crypto.Crypto;
	import com.hurlant.crypto.symmetric.ICipher;
	import com.hurlant.crypto.symmetric.IPad;
	import com.hurlant.crypto.symmetric.IVMode;
	import com.hurlant.crypto.symmetric.PKCS5;
	import com.hurlant.util.Base64;
	import com.hurlant.util.Hex;
	
	import flash.utils.ByteArray;

	public class As3Crypto
	{
		public static var ENC_KEY:String = MD5.hash("암호키");
		public static var ENC_IV:String = MD5.hash("IV키");
		
		public static function encrypt(str:String):String
		{
			var data:ByteArray = Hex.toArray(Hex.fromString(str));
			
			var kdata:ByteArray = Hex.toArray(ENC_KEY);
			var pad:IPad = new PKCS5();
			var cipher:ICipher = Crypto.getCipher('aes-128-cbc', kdata, pad);
			pad.setBlockSize(cipher.getBlockSize());
			if(cipher is IVMode)
			{
				var ivmode:IVMode = cipher as IVMode;
				ivmode.IV = Hex.toArray(ENC_IV);
			}
			cipher.encrypt(data);
			return Base64.encodeByteArray(data);
		}
		
		public static function decrypt(str:String):String {
			var data:ByteArray = Base64.decodeToByteArray(str);
			var kdata:ByteArray = Hex.toArray(ENC_KEY);
			var pad:IPad = new PKCS5();
			var cipher:ICipher = Crypto.getCipher('aes-128-cbc', kdata, pad);
			pad.setBlockSize(cipher.getBlockSize());
			if(cipher is IVMode) {
				var ivmode:IVMode = cipher as IVMode;
				ivmode.IV = Hex.toArray(ENC_IV);
			}
			cipher.decrypt(data);
			return Hex.toString(Hex.fromArray(data));
		}
	}
}