·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]as3加密算法AES加密算法

时间:2015-12-11 12:29酷播
[AS3]as3加密算法AES加密算法

[AS3]as3加密算法AES加密算法

  1.   1: package { 
  2.  
  3.   2: import com.hurlant.crypto.Crypto; 
  4.  
  5.   3: import com.hurlant.crypto.prng.Random; 
  6.  
  7.   4: import com.hurlant.crypto.symmetric.ICipher; 
  8.  
  9.   5: import com.hurlant.crypto.symmetric.IPad; 
  10.  
  11.   6: import com.hurlant.crypto.symmetric.IVMode; 
  12.  
  13.   7: import com.hurlant.crypto.symmetric.PKCS5; 
  14.  
  15.   8: import com.hurlant.util.Base64; 
  16.  
  17.   9: import com.hurlant.util.Hex; 
  18.  
  19.  10:   
  20.  
  21.  11: import flash.utils.ByteArray; 
  22.  
  23.  12:   
  24.  
  25.  13: /** 
  26.  
  27.  14: * AES 算法的加密解密工具类。 
  28.  
  29.  15: * 
  30.  
  31.  16: * @author Fuchun 
  32.  
  33.  17: * @langversion 3.0 
  34.  
  35.  18: * @playerversion Flash 11.1 
  36.  
  37.  19: * @productversion 1.0 
  38.  
  39.  20: */ 
  40.  
  41.  21: public class AES { 
  42.  
  43.  22:   
  44.  
  45.  23: /** 
  46.  
  47.  24: * 默认的算法与模式名称。 
  48.  
  49.  25: */ 
  50.  
  51.  26: public static const DEFAULT_CIPHER_NAME:String = "aes-128-cbc"
  52.  
  53.  27:   
  54.  
  55.  28: /** 
  56.  
  57.  29: * 默认的填充模式。<code>pkcs5</code> 
  58.  
  59.  30: */ 
  60.  
  61.  31: public static const DEFAULT_PADNAME:String = "pkcs5"
  62.  
  63.  32:   
  64.  
  65.  33: /** 
  66.  
  67.  34: * 无填充。 
  68.  
  69.  35: */ 
  70.  
  71.  36: public static const NULL_PADDING:String = "null"
  72.  
  73.  37:   
  74.  
  75.  38: private static const RAND:Random = new Random(); 
  76.  
  77.  39:   
  78.  
  79.  40: private var _name:String; 
  80.  
  81.  41: // 密钥 
  82.  
  83.  42: private var _key:ByteArray; 
  84.  
  85.  43: // 向量 
  86.  
  87.  44: private var _iv:ByteArray; 
  88.  
  89.  45: // 填充模式 
  90.  
  91.  46: private var _padName:String; 
  92.  
  93.  47: private var _enc:ICipher; 
  94.  
  95.  48: private var _dec:ICipher; 
  96.  
  97.  49:   
  98.  
  99.  50: public function AES(key:ByteArray, iv:ByteArray = nullname:String = DEFAULT_CIPHER_NAMEpadName:String = DEFAULT_PADNAME) { 
  100.  
  101.  51: _name = name; 
  102.  
  103.  52: _key = key; 
  104.  
  105.  53: _iv = iv; 
  106.  
  107.  54: _padName = padName; 
  108.  
  109.  55: init(); 
  110.  
  111.  56: } 
  112.  
  113.  57:   
  114.  
  115.  58: private function init():void { 
  116.  
  117.  59:   var _pad:IPad = Crypto.getPad(_padName); 
  118.  
  119.  60:   _enc = Crypto.getCipher(_name, _key, _pad); 
  120.  
  121.  61:   _dec = Crypto.getCipher(_name, _key, _pad); 
  122.  
  123.  62:   if (iv) { 
  124.  
  125.  63:     if (_enc is IVMode) { 
  126.  
  127.  64:       var encIvm:IVMode = _enc as IVMode; 
  128.  
  129.  65:       encIvm.IV = iv
  130.  
  131.  66:     } 
  132.  
  133.  67:     if (_dec is IVMode) { 
  134.  
  135.  68:       var decIvm:IVMode = _dec as IVMode; 
  136.  
  137.  69:       decIvm.IV = iv
  138.  
  139.  70:     } 
  140.  
  141.  71:   } 
  142.  
  143.  72: } 
  144.  
  145.  73:   
  146.  
  147.  74: public static function generateKey(name:String):ByteArray { 
  148.  
  149.  75:   var keyLength:uint = Crypto.getKeySize(name); 
  150.  
  151.  76:   var key:ByteArray = new ByteArray(); 
  152.  
  153.  77:   RAND.nextBytes(key, keyLength); 
  154.  
  155.  78:   return key; 
  156.  
  157.  79: } 
  158.  
  159.  80:   
  160.  
  161.  81: public static function generateIV(name:String, key:ByteArray):ByteArray { 
  162.  
  163.  82:   var cipher:ICipher = Crypto.getCipher(name, key); 
  164.  
  165.  83:   var iv:ByteArray = new ByteArray(); 
  166.  
  167.  84:   RAND.nextBytes(iv, cipher.getBlockSize()); 
  168.  
  169.  85:   return iv; 
  170.  
  171.  86: } 
  172.  
  173.  87:   
  174.  
  175.  88: public function encrypt(input:ByteArray):ByteArray { 
  176.  
  177.  89:   var src:ByteArray = new ByteArray(); 
  178.  
  179.  90:   var result:ByteArray = new ByteArray(); 
  180.  
  181.  91:   src.writeBytes(input, 0, input.length); 
  182.  
  183.  92:   
  184.  
  185.  93:   _enc.encrypt(input); 
  186.  
  187.  94:   result.writeBytes(input, 0, input.length); 
  188.  
  189.  95:   input.length = 0
  190.  
  191.  96:   input.writeBytes(src, 0, src.length); 
  192.  
  193.  97:   
  194.  
  195.  98:   src.clear(); 
  196.  
  197.  99:   return result; 
  198.  
  199. 100: } 
  200.  
  201. 101:   
  202.  
  203. 102: public function decrypt(input:ByteArray):ByteArray { 
  204.  
  205. 103:   var src:ByteArray = new ByteArray(); 
  206.  
  207. 104:   var result:ByteArray = new ByteArray(); 
  208.  
  209. 105:   src.writeBytes(input, 0, input.length); 
  210.  
  211. 106:   
  212.  
  213. 107:   _dec.decrypt(input); 
  214.  
  215. 108:   result.writeBytes(input, 0, input.length); 
  216.  
  217. 109:   input.length = 0
  218.  
  219. 110:   input.writeBytes(src, 0, src.length); 
  220.  
  221. 111:   
  222.  
  223. 112:   src.clear(); 
  224.  
  225. 113:   return result; 
  226.  
  227. 114: } 
  228.  
  229. 115:   
  230.  
  231. 116: public function encryptString(input:String):ByteArray { 
  232.  
  233. 117:   if (!input || !input.length) { 
  234.  
  235. 118:     return null; 
  236.  
  237. 119:   } 
  238.  
  239. 120:   var inputBytes:ByteArray = new ByteArray(); 
  240.  
  241. 121:   inputBytes.writeUTFBytes(input); 
  242.  
  243. 122:   return encrypt(inputBytes); 
  244.  
  245. 123: } 
  246.  
  247. 124:   
  248.  
  249. 125: //无配对的解密方法,加密后的结果无法直接用decryptString2Hex解密 
  250.  
  251. 126: public function encryptString2Hex(input:String):String { 
  252.  
  253. 127:   var result:ByteArray = encryptString(input); 
  254.  
  255. 128:   return Hex.fromArray(result); 
  256.  
  257. 129: } 
  258.  
  259. 130:   
  260.  
  261. 131: //无配对的解密方法,加密后的结果无法直接用decryptString2Hex解密 
  262.  
  263. 132: public function encryptString2Base64(input:String):String { 
  264.  
  265. 133:   var result:ByteArray = encryptString(input); 
  266.  
  267. 134:   return Base64.encodeByteArray(result); 
  268.  
  269. 135: } 
  270.  
  271. 136:   
  272.  
  273. 137: //代码中我们一般习惯直接加密字符串,加密后直接得到密文字符串,这里没有提供这个方法 
  274.  
  275. 138:   
  276.  
  277. 139: public function decryptString(input:String):ByteArray { 
  278.  
  279. 140:   if (!input || !input.length) { 
  280.  
  281. 141:     return null; 
  282.  
  283. 142:   } 
  284.  
  285. 143:   var inputBytes:ByteArray = new ByteArray(); 
  286.  
  287. 144:   inputBytes.writeUTFBytes(input); 
  288.  
  289. 145:   return decrypt(inputBytes); 
  290.  
  291. 146: } 
  292.  
  293. 147:   
  294.  
  295. 148: public function decryptString2Hex(input:String):String { 
  296.  
  297. 149:   var result:ByteArray = decryptString(input); 
  298.  
  299. 150:   return Hex.fromArray(result); 
  300.  
  301. 151: } 
  302.  
  303. 152:   
  304.  
  305. 153: public function decryptString2Base64(input:String):String { 
  306.  
  307. 154:   var result:ByteArray = decryptString(input); 
  308.  
  309. 155:   return Base64.encodeByteArray(result); 
  310.  
  311. 156: } 
  312.  
  313. 157:   
  314.  
  315. 158: public function set iv(value:ByteArray):void { 
  316.  
  317. 159:   _iv = value
  318.  
  319. 160: } 
  320.  
  321. 161: public function get iv():ByteArray { 
  322.  
  323. 162:   return _iv; 
  324.  
  325. 163: } 
  326.  
  327. 164: } 
  328.  
  329. 165: } 

[AS3]as3加密算法AES加密算法

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器