·您当前的位置:首页 > 技术教程 > 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. * 
  16. * @author Fuchun 
  17. * @langversion 3.0 
  18. * @playerversion Flash 11.1 
  19. * @productversion 1.0 
  20. */ 
  21. public class AES { 
  22.  
  23. /** 
  24. * 默认的算法与模式名称。 
  25. */ 
  26. public static const DEFAULT_CIPHER_NAME:String = "aes-128-cbc"; 
  27.  
  28. /** 
  29. * 默认的填充模式。<code>pkcs5</code> 
  30. */ 
  31. public static const DEFAULT_PADNAME:String = "pkcs5"; 
  32.  
  33. /** 
  34. * 无填充。 
  35. */ 
  36. public static const NULL_PADDING:String = "null"; 
  37.  
  38. private static const RAND:Random = new Random(); 
  39.  
  40. private var _name:String; 
  41. // 密钥 
  42. private var _key:ByteArray; 
  43. // 向量 
  44. private var _iv:ByteArray; 
  45. // 填充模式 
  46. private var _padName:String; 
  47. private var _enc:ICipher; 
  48. private var _dec:ICipher; 
  49.  
  50. public function AES(key:ByteArray, iv:ByteArray = null, name:String = DEFAULT_CIPHER_NAME, padName:String = DEFAULT_PADNAME) { 
  51. _name = name; 
  52. _key = key; 
  53. _iv = iv; 
  54. _padName = padName; 
  55. init(); 
  56. } 
  57.  
  58. private function init():void { 
  59.   var _pad:IPad = Crypto.getPad(_padName); 
  60.   _enc = Crypto.getCipher(_name, _key, _pad); 
  61.   _dec = Crypto.getCipher(_name, _key, _pad); 
  62.   if (iv) { 
  63.     if (_enc is IVMode) { 
  64.       var encIvm:IVMode = _enc as IVMode; 
  65.       encIvm.IV = iv; 
  66.     } 
  67.     if (_dec is IVMode) { 
  68.       var decIvm:IVMode = _dec as IVMode; 
  69.       decIvm.IV = iv; 
  70.     } 
  71.   } 
  72. } 
  73.  
  74. public static function generateKey(name:String):ByteArray { 
  75.   var keyLength:uint = Crypto.getKeySize(name); 
  76.   var key:ByteArray = new ByteArray(); 
  77.   RAND.nextBytes(key, keyLength); 
  78.   return key; 
  79. } 
  80.  
  81. public static function generateIV(name:String, key:ByteArray):ByteArray { 
  82.   var cipher:ICipher = Crypto.getCipher(name, key); 
  83.   var iv:ByteArray = new ByteArray(); 
  84.   RAND.nextBytes(iv, cipher.getBlockSize()); 
  85.   return iv; 
  86. } 
  87.  
  88. public function encrypt(input:ByteArray):ByteArray { 
  89.   var src:ByteArray = new ByteArray(); 
  90.   var result:ByteArray = new ByteArray(); 
  91.   src.writeBytes(input, 0, input.length); 
  92.  
  93.   _enc.encrypt(input); 
  94.   result.writeBytes(input, 0, input.length); 
  95.   input.length = 0; 
  96.   input.writeBytes(src, 0, src.length); 
  97.  
  98.   src.clear(); 
  99.   return result; 
  100. } 
  101.  
  102. public function decrypt(input:ByteArray):ByteArray { 
  103.   var src:ByteArray = new ByteArray(); 
  104.   var result:ByteArray = new ByteArray(); 
  105.   src.writeBytes(input, 0, input.length); 
  106.  
  107.   _dec.decrypt(input); 
  108.   result.writeBytes(input, 0, input.length); 
  109.   input.length = 0; 
  110.   input.writeBytes(src, 0, src.length); 
  111.  
  112.   src.clear(); 
  113.   return result; 
  114. } 
  115.  
  116. public function encryptString(input:String):ByteArray { 
  117.   if (!input || !input.length) { 
  118.     return null; 
  119.   } 
  120.   var inputBytes:ByteArray = new ByteArray(); 
  121.   inputBytes.writeUTFBytes(input); 
  122.   return encrypt(inputBytes); 
  123. } 
  124.  
  125. public function encryptString2Hex(input:String):String { 
  126.   var result:ByteArray = encryptString(input); 
  127.   return Hex.fromArray(result); 
  128. } 
  129.  
  130. public function encryptString2Base64(input:String):String { 
  131.   var result:ByteArray = encryptString(input); 
  132.   return Base64.encodeByteArray(result); 
  133. } 
  134.  
  135. public function decryptString(input:String):ByteArray { 
  136.   if (!input || !input.length) { 
  137.     return null; 
  138.   } 
  139.   var inputBytes:ByteArray = new ByteArray(); 
  140.   inputBytes.writeUTFBytes(input); 
  141.   return decrypt(inputBytes); 
  142. } 
  143.  
  144. public function decryptString2Hex(input:String):String { 
  145.   var result:ByteArray = decryptString(input); 
  146.   return Hex.fromArray(result); 
  147. } 
  148.  
  149. public function decryptString2Base64(input:String):String { 
  150.   var result:ByteArray = decryptString(input); 
  151.   return Base64.encodeByteArray(result); 
  152. } 
  153.  
  154. public function set iv(value:ByteArray):void { 
  155.   _iv = value; 
  156. } 
  157. public function get iv():ByteArray { 
  158.   return _iv; 
  159. } 
  160. } 
  161. } 

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.     } 
  63. } 

热门文章推荐

请稍候...

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

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