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

[as3]as3类的加密与java之间的通信(as3crypto类AES加密解密)

时间:2015-02-25 09:36酷播
[as3]as3crypto与Java间通信数据的AES加密解密,[as3]as3类的加密与java之间的通信(AES加密解密)

[as3]as3crypto与Java间通信数据的AES加密解密

  1. package { 
  2. import com.hurlant.crypto.Crypto; 
  3. import com.hurlant.crypto.prng.Random; 
  4. import com.hurlant.crypto.symmetric.ICipher; 
  5. import com.hurlant.crypto.symmetric.IPad; 
  6. import com.hurlant.crypto.symmetric.IVMode; 
  7. import com.hurlant.crypto.symmetric.PKCS5; 
  8. import com.hurlant.util.Base64; 
  9. import com.hurlant.util.Hex; 
  10.  
  11. import flash.utils.ByteArray; 
  12.  
  13. /** 
  14. * AES 算法的加密解密工具类。 
  15. * @author Fuchun 
  16. * @langversion 3.0 
  17. * @playerversion Flash 11.1 
  18. * @productversion 1.0 
  19. */ 
  20. public class AES { 
  21.  
  22. /** 
  23. * 默认的算法与模式名称。 
  24. */ 
  25. public static const DEFAULT_CIPHER_NAME:String = "aes-128-cbc"
  26.  
  27. /** 
  28. * 默认的填充模式。<code>pkcs5</code> 
  29. */ 
  30. public static const DEFAULT_PADNAME:String = "pkcs5"
  31.  
  32. /** 
  33. * 无填充。 
  34. */ 
  35. public static const NULL_PADDING:String = "null"
  36.  
  37. private static const RAND:Random = new Random(); 
  38.  
  39. private var _name:String; 
  40. // 密钥 
  41. private var _key:ByteArray; 
  42. // 向量 
  43. private var _iv:ByteArray; 
  44. // 填充模式 
  45. private var _padName:String; 
  46. private var _enc:ICipher; 
  47. private var _dec:ICipher; 
  48.  
  49. public function AES(key:ByteArray, iv:ByteArray = nullname:String = DEFAULT_CIPHER_NAMEpadName:String = DEFAULT_PADNAME) { 
  50. _name = name; 
  51. _key = key; 
  52. _iv = iv; 
  53. _padName = padName; 
  54. init(); 
  55.  
  56. private function init():void { 
  57.   var _pad:IPad = Crypto.getPad(_padName); 
  58.   _enc = Crypto.getCipher(_name, _key, _pad); 
  59.   _dec = Crypto.getCipher(_name, _key, _pad); 
  60.   if (iv) { 
  61.     if (_enc is IVMode) { 
  62.       var encIvm:IVMode = _enc as IVMode; 
  63.       encIvm.IV = iv
  64.     } 
  65.     if (_dec is IVMode) { 
  66.       var decIvm:IVMode = _dec as IVMode; 
  67.       decIvm.IV = iv
  68.     } 
  69.   } 
  70.  
  71. public static function generateKey(name:String):ByteArray { 
  72.   var keyLength:uint = Crypto.getKeySize(name); 
  73.   var key:ByteArray = new ByteArray(); 
  74.   RAND.nextBytes(key, keyLength); 
  75.   return key; 
  76.  
  77. public static function generateIV(name:String, key:ByteArray):ByteArray { 
  78.   var cipher:ICipher = Crypto.getCipher(name, key); 
  79.   var iv:ByteArray = new ByteArray(); 
  80.   RAND.nextBytes(iv, cipher.getBlockSize()); 
  81.   return iv; 
  82.  
  83. public function encrypt(input:ByteArray):ByteArray { 
  84.   var src:ByteArray = new ByteArray(); 
  85.   var result:ByteArray = new ByteArray(); 
  86.   src.writeBytes(input, 0, input.length); 
  87.  
  88.   _enc.encrypt(input); 
  89.   result.writeBytes(input, 0, input.length); 
  90.   input.length = 0
  91.   input.writeBytes(src, 0, src.length); 
  92.  
  93.   src.clear(); 
  94.   return result; 
  95.  
  96. public function decrypt(input:ByteArray):ByteArray { 
  97.   var src:ByteArray = new ByteArray(); 
  98.   var result:ByteArray = new ByteArray(); 
  99.   src.writeBytes(input, 0, input.length); 
  100.  
  101.   _dec.decrypt(input); 
  102.   result.writeBytes(input, 0, input.length); 
  103.   input.length = 0
  104.   input.writeBytes(src, 0, src.length); 
  105.  
  106.   src.clear(); 
  107.   return result; 
  108.  
  109. public function encryptString(input:String):ByteArray { 
  110.   if (!input || !input.length) { 
  111.     return null; 
  112.   } 
  113.   var inputBytes:ByteArray = new ByteArray(); 
  114.   inputBytes.writeUTFBytes(input); 
  115.   return encrypt(inputBytes); 
  116.  
  117. public function encryptString2Hex(input:String):String { 
  118.   var result:ByteArray = encryptString(input); 
  119.   return Hex.fromArray(result); 
  120.  
  121. public function encryptString2Base64(input:String):String { 
  122.   var result:ByteArray = encryptString(input); 
  123.   return Base64.encodeByteArray(result); 
  124.  
  125. public function decryptString(input:String):ByteArray { 
  126.   if (!input || !input.length) { 
  127.     return null; 
  128.   } 
  129.   var inputBytes:ByteArray = new ByteArray(); 
  130.   inputBytes.writeUTFBytes(input); 
  131.   return decrypt(inputBytes); 
  132.  
  133. public function decryptString2Hex(input:String):String { 
  134.   var result:ByteArray = decryptString(input); 
  135.   return Hex.fromArray(result); 
  136.  
  137. public function decryptString2Base64(input:String):String { 
  138.   var result:ByteArray = decryptString(input); 
  139.   return Base64.encodeByteArray(result); 
  140.  
  141. public function set iv(value:ByteArray):void { 
  142.   _iv = value
  143. public function get iv():ByteArray { 
  144.   return _iv; 

AESTest (Flex Unit):

  1. package { 
  2.  
  3.     import com.hurlant.crypto.prng.Random; 
  4.     import com.hurlant.util.Hex; 
  5.     
  6.     import flash.utils.ByteArray; 
  7.     
  8.     import flexunit.framework.Assert; 
  9.     
  10.     import org.flexunit.asserts.assertEquals; 
  11.     
  12.     public class AESTest { 
  13.          
  14.         private static const RAND:Random = new Random(); 
  15.          
  16.         private var aes:AES; 
  17.         private var key:ByteArray; 
  18.         private var iv:ByteArray; 
  19.          
  20.         private var text:ByteArray; 
  21.          
  22.         [Before] 
  23.         public function setUp():void { 
  24.             key = AES.generateKey(AES.DEFAULT_CIPHER_NAME); 
  25.             iv = AES.generateIV(AES.DEFAULT_CIPHER_NAME, key); 
  26.             aes = new AES(key, iv); 
  27.              
  28.             text = new ByteArray(); 
  29.             RAND.nextBytes(text, 32); 
  30.         } 
  31.          
  32.         [After] 
  33.         public function tearDown():void { 
  34.             key = null
  35.             iv = null
  36.             aes = null
  37.             text.clear(); 
  38.             text = null
  39.         } 
  40.          
  41.         [BeforeClass] 
  42.         public static function setUpBeforeClass():void { 
  43.         } 
  44.          
  45.         [AfterClass] 
  46.         public static function tearDownAfterClass():void { 
  47.         } 
  48.          
  49.         [Test] 
  50.         public function testCrypto():void { 
  51.             var encryptedBytes:ByteArray = aes.encrypt(text); 
  52.              
  53.             trace("原文是(Hex):" + Hex.fromArray(text)); 
  54.             trace("加密后(Hex):" + Hex.fromArray(encryptedBytes)); 
  55.              
  56.             var decryptedBytes:ByteArray = aes.decrypt(encryptedBytes); 
  57.              
  58.             trace("解密后(Hex):" + Hex.fromArray(decryptedBytes)); 
  59.              
  60.             assertEquals(Hex.fromArray(text), Hex.fromArray(decryptedBytes)); 
  61.         } 
  62.     } 

热门文章推荐

请稍候...

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

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