为什么80%的码农都做不了架构师?>>>   

Adobe官网提供的as3corelib-.93包中的MD5,对稍大的数据执行速度都很慢,原因是代码对Flash执行机制没有针对性优化。 而且没有使用inline函数,呵呵,下面给出优化过的MD5,不仅比as3corelib-.93包中的MD5的快,还可以和alchemy的md5比速度!

必须使用Flex sdk 4.5增强补丁才能完整编译

package {import flash.Memory;import flash.SetDomainMemory;import flash.utils.ByteArray;   import flash.utils.getTimer;/** 优化MD5* 主要优化执行方式,尽量减少调用函数和尽可能不使用循环* 利用flash.Memory类直接读写数据流* 优化后提升执行速度是原来的10多倍* Directed by kiwiw3* */public class MyMD5 {public static var digest:ByteArray;static private var hexChars:String = "0123456789abcdef";public static function hash(s:String) :String{ var ba:ByteArray = new ByteArray();ba.writeUTFBytes(s);return hashBinary(ba);}public static function hashBytes(s:ByteArray) :String{  return hashBinary(s);}public static function hashBinary( sa:ByteArray ):String { var a:int = 1732584193;var b:int = -271733879;var c:int = -1732584194;var d:int = 271733878;//var tmp:int;var x0:int;var x1:int;var x2:int;var x3:int;var x4:int;var x5:int;var x6:int;var x7:int;var x8:int;var x9:int;var x10:int;var x11:int;var x12:int;var x13:int;var x14:int;var x15:int;var aa:int;var bb:int;var cc:int;var dd:int; var rx:Array= createBlocksVector(sa);var x:ByteArray = rx[0];var len:int = rx[1];//补全16的倍数位var rest:int = len % 16;if(rest>0){x.length += rest * 4;for ( i = 0; i < rest; i ++) {//x[int(len + i)] = 0;Memory.setI32(0,int(len + i)*4);}}// loop over all of the blocks for ( var i:int = 0; i < len; i += 16){aa = a;bb = b;cc = c;dd = d;var t:int = i * 4;
x0 = Memory.getI32(int(t))
x1 = Memory.getI32(int(t+ 4))
x2 = Memory.getI32(int(t+ 8))
x3 = Memory.getI32(int(t+ 12))
x4 = Memory.getI32(int(t+ 16))
x5 = Memory.getI32(int(t+ 20))
x6 = Memory.getI32(int(t+ 24))
x7 = Memory.getI32(int(t+ 28))
x8 = Memory.getI32(int(t+ 32))
x9 = Memory.getI32(int(t+ 36))
x10 = Memory.getI32(int(t+ 40))
x11 = Memory.getI32(int(t+ 44))
x12 = Memory.getI32(int(t+ 48))
x13 = Memory.getI32(int(t+ 52))
x14 = Memory.getI32(int(t+ 56))
x15 = Memory.getI32(int(t+ 60))// Round 1a = ff( a, b, c, d, x0,  7, -680876936 );   // 1d = ff( d, a, b, c, x1, 12, -389564586 );  // 2c = ff( c, d, a, b, x2, 17, 606105819 );   // 3b = ff( b, c, d, a, x3, 22, -1044525330 ); // 4a = ff( a, b, c, d, x4,  7, -176418897 );  // 5d = ff( d, a, b, c, x5, 12, 1200080426 );  // 6c = ff( c, d, a, b, x6, 17, -1473231341 ); // 7b = ff( b, c, d, a, x7, 22, -45705983 );   // 8a = ff( a, b, c, d, x8,  7, 1770035416 );  // 9d = ff( d, a, b, c, x9, 12, -1958414417 ); // 10c = ff( c, d, a, b, x10, 17, -42063 );        // 11b = ff( b, c, d, a, x11, 22, -1990404162 );   // 12a = ff( a, b, c, d, x12,  7, 1804603682 );    // 13d = ff( d, a, b, c, x13, 12, -40341101 );     // 14c = ff( c, d, a, b, x14, 17, -1502002290 );   // 15b = ff( b, c, d, a, x15, 22, 1236535329 );    // 16// Round 2a = gg( a, b, c, d, x1,  5, -165796510 );   // 17d = gg( d, a, b, c, x6,  9, -1069501632 );    // 18c = gg( c, d, a, b, x11, 14, 643717713 );     // 19b = gg( b, c, d, a, x0, 20, -373897302 );     // 20a = gg( a, b, c, d, x5,  5, -701558691 );     // 21d = gg( d, a, b, c, x10,  9, 38016083 );  // 22c = gg( c, d, a, b, x15, 14, -660478335 );    // 23b = gg( b, c, d, a, x4, 20, -405537848 );     // 24a = gg( a, b, c, d, x9,  5, 568446438 );  // 25d = gg( d, a, b, c, x14,  9, -1019803690 );   // 26c = gg( c, d, a, b, x3, 14, -187363961 );     // 27b = gg( b, c, d, a, x8, 20, 1163531501 );     // 28a = gg( a, b, c, d, x13,  5, -1444681467 );   // 29d = gg( d, a, b, c, x2,  9, -51403784 );  // 30c = gg( c, d, a, b, x7, 14, 1735328473 );     // 31b = gg( b, c, d, a, x12, 20, -1926607734 );   // 32// Round 3a = hh( a, b, c, d, x5,  4, -378558 );  // 33d = hh( d, a, b, c, x8, 11, -2022574463 );    // 34c = hh( c, d, a, b, x11, 16, 1839030562 );    // 35b = hh( b, c, d, a, x14, 23, -35309556 );     // 36a = hh( a, b, c, d, x1,  4, -1530992060 );    // 37d = hh( d, a, b, c, x4, 11, 1272893353 );     // 38c = hh( c, d, a, b, x7, 16, -155497632 );     // 39b = hh( b, c, d, a, x10, 23, -1094730640 );   // 40a = hh( a, b, c, d, x13,  4, 681279174 );     // 41d = hh( d, a, b, c, x0, 11, -358537222 );     // 42c = hh( c, d, a, b, x3, 16, -722521979 );     // 43b = hh( b, c, d, a, x6, 23, 76029189 );   // 44a = hh( a, b, c, d, x9,  4, -640364487 );     // 45d = hh( d, a, b, c, x12, 11, -421815835 );    // 46c = hh( c, d, a, b, x15, 16, 530742520 );     // 47b = hh( b, c, d, a, x2, 23, -995338651 );     // 48// Round 4a = ii( a, b, c, d, x0,  6, -198630844 );   // 49d = ii( d, a, b, c, x7, 10, 1126891415 );     // 50c = ii( c, d, a, b, x14, 15, -1416354905 );   // 51b = ii( b, c, d, a, x5, 21, -57434055 );  // 52a = ii( a, b, c, d, x12,  6, 1700485571 );    // 53d = ii( d, a, b, c, x3, 10, -1894986606 );    // 54c = ii( c, d, a, b, x10, 15, -1051523 );  // 55b = ii( b, c, d, a, x1, 21, -2054922799 );    // 56a = ii( a, b, c, d, x8,  6, 1873313359 );     // 57d = ii( d, a, b, c, x15, 10, -30611744 );     // 58c = ii( c, d, a, b, x6, 15, -1560198380 );    // 59b = ii( b, c, d, a, x13, 21, 1309151649 );    // 60a = ii( a, b, c, d, x4,  6, -145523070 );     // 61d = ii( d, a, b, c, x11, 10, -1120210379 );   // 62c = ii( c, d, a, b, x2, 15, 718787259 );  // 63b = ii( b, c, d, a, x9, 21, -343485551 );     // 64a += aa;b += bb;c += cc;d += dd;}digest = new ByteArray()digest.writeInt(a);digest.writeInt(b);digest.writeInt(c);digest.writeInt(d);digest.position = 0;// Finish up by concatening the buffers with their hex outputreturn toHex( a ) + toHex( b ) + toHex( c ) + toHex( d );}public static inline function toHex( n:int):String {var s:String = "";for ( var x:int = 0; x < 4; x++ ) {s += hexChars.charAt( ( n >> ( x * 8 + 4 ) ) & 0xF )+ hexChars.charAt( ( n >> ( x * 8 ) ) & 0xF );}return s;}private static inline function rol(num:int, cnt:int):int{return (num << cnt) | (num >>> (32 - cnt));}/*** ff function*/private static inline function ff ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int {return rol( a + (( b & c ) | ( ~b & d )) + x + t, s ) +  b;}/*** gg function*/private static inline function gg ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int {return rol( a + (( b & d ) | ( c & ~d)) + x + t, s ) +  b;}/*** hh function*/private static inline function hh ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int {return rol( a + (b ^ c ^ d) + x + t, s ) +  b;}/*** ii function*/private static inline function ii ( a:int, b:int, c:int, d:int, x:int, s:int, t:int ):int {return rol( a + (c ^ ( b | ~d )) + x + t, s ) +  b;}private inline function createBlocksVector( sa:ByteArray ):Array {var len:int = sa.length * 8;var blen:int=sa.length = (int(( ( ( len + 64 ) >>> 9 ) << 4 ) + 14) + 1) * 4;if (sa.length < 1024) {sa.length = 1024;}SetDomainMemory(sa);for ( var i:int = 0, j:int = 0; i < len; i += 8, j+=4) {Memory.setI32(Memory.getI32((i >> 5) * 4) | ( Memory.getByte(j) & 0xFF ), (i >> 5) * 4);i+=8Memory.setI32(Memory.getI32((i >> 5)*4)|(( Memory.getByte(j+1) & 0xFF) << 8), (i >> 5)*4);i+=8Memory.setI32(Memory.getI32((i >> 5)*4)|(( Memory.getByte(j+2) & 0xFF) << 16), (i >> 5)*4);i+=8Memory.setI32(Memory.getI32((i >> 5)*4)|(( Memory.getByte(j+3) & 0xFF) << 24), (i >> 5)*4);}Memory.setI32(Memory.getI32((len >> 5) * 4)|(0x80 << ( len % 32 )), (len >> 5) * 4);Memory.setI32(len,(int(( ( ( len + 64 ) >>> 9 ) << 4 ) + 14))*4);return [sa,int(blen/4)];}}
}

转载于:https://my.oschina.net/3kis/blog/80848

Flash使用域内存api的MD5,速度超快!相关推荐

  1. 通过QQ旋风离线下载Android SDK,速度超快

    通过QQ旋风离线下载Android SDK,速度超快 2011年06月16日 在国内通过 Android SDK AND AVD Manager 进行在线安装非常慢,在google中搜了搜,找到了用下 ...

  2. 用python可以免费下载音乐吗-使用python实现下载我们想听的歌曲,速度超快

    这里发现一个可以下歌的工具pymusic-dl,很好用,当然付费歌曲是下不来的,集成了很多音乐库的歌曲 首先安装pymusic-dl pip install pymusic-dl 仔细发现就会知道,其 ...

  3. Javascript之字节跳动 浮点数与十六进制互相转换 有符号整数与十六进制互相转换 速度超快

    查了很多,很少有人写这个的,偶尔找到的代码也有各种问题,要么是特殊情况算错,要么是速度太慢(速度大概是我这个的5%),遂自己写一个,目前应该是全网不要钱的博客里速度最快了吧,如果还有别的优化建议,欢迎 ...

  4. 速度超快!字节跳动开源序列推理引擎LightSeq

    机器之心发布 机器之心编辑部 这应该是业界第一款完整支持 Transformer.GPT 等多种模型高速推理的开源引擎. 2017 年 Google 提出了 Transformer [1] 模型,之后 ...

  5. IT民工系列——c#操作PhotoBucket上传图片(再来一款图床备选方案,速度超快!)...

    前言: 我是一名IT民工,热爱计算机 热爱软件.我从事.net平台开发也有几年了,专注c#.熟悉: ORM/RBAC/AOP/OO/持久层/数据流/工作流/信息流/企业系统开发/Excel等解密等. ...

  6. 速度超快,免驱动,不蓝屏的TL-XDS560V2仿真器

    TL-XDS560V2仿真器简介 创龙TL-XDS560V2是一款快速.稳定.功能强大的XDS560v2仿真器,支持系统跟踪(System Trace)与网络调试模式,适用于TI绝大部分主流处理器平台 ...

  7. 蜻蜓大脑算法速度超快,AI科学家:拿来吧你

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 兴坤 发自 凹非寺 量子位 报道 | 公众号 QbitAI 蜻蜓作为卓越的捕食者,能够 ...

  8. 开启6.0 sd卡读写权限_解了摄影师的燃眉之急:入手雷克沙TF卡,一卡多用速度超快...

    这对我来说,是一个非常常规的周末. 带着相机去外拍的时候,顺便从快递代收点取雷克沙667x 256GB的TF卡.之所以买这款雷克沙TF卡,实际上有两个用途:一个是放到新的行车记录仪里面,去测试和记录一 ...

  9. 利用python下载我们想听的歌曲,速度超快

    这里发现一个可以下歌的工具pymusic-dl,很好用,当然付费歌曲是下不来的,集成了很多音乐库的歌曲 首先安装pymusic-dl pip install pymusic-dl 仔细发现就会知道,其 ...

最新文章

  1. 检测单选按钮的值发生变化的事件
  2. Centos7 yum安装Python3.6环境,超简单
  3. 利用反射操作bean的属性和方法
  4. 充分条件反过来是必要条件吗_“充分必要条件”引发的现实思考
  5. Socket网络编程【获取本机IP】
  6. python怎么取出数字,如何在python中取数字的第n个数字
  7. MATLAB gui handles 未定义 及 理解
  8. 计算机科学概论_第1章_数据储存
  9. Powermill数控编程培训,潇洒模具三步教您精通cnc数控编程
  10. Mysql 启动命令详解
  11. 学好UI设计必备软件
  12. 【One Page】概率论复习|Probability Theory Review
  13. [办公软件word] 怎么让Worde2019显示所有批注?
  14. java看片_java – 如何正确查看片段
  15. 初始C语言——成绩等级划分
  16. 项目 - 基于Docker Swarm的高可用Web集群
  17. 哔哩哔哩(B站)的前端之路
  18. 看《Sicko》,有感
  19. [安卓]手机管家(八)防盗之业务逻辑
  20. wps 如何查找多年前的文档

热门文章

  1. oracle绑定变量赋值,Oracle教程之绑定变量
  2. Symmetric Pairs(连接、分组,聚合)
  3. 判断闰年 及其某天为这一年的多少天
  4. is 和 == 以及 编码和解码
  5. 错误---获取Input的值为空字符串
  6. [排序算法] 选择排序(2种)
  7. 在Mac系统下使用自己安装的PHP
  8. 谷歌地图最新hosts_如何查看2020最新版谷歌地球高精度卫星地图(附下载方法)...
  9. 安卓音频输出采样率_只有AirPods配有姓名吗?安卓的这些无线耳机也不错
  10. Liunx下HPCC(HPC Challenge)的安装运行