Flash使用域内存api的MD5,速度超快!
为什么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,速度超快!相关推荐
- 通过QQ旋风离线下载Android SDK,速度超快
通过QQ旋风离线下载Android SDK,速度超快 2011年06月16日 在国内通过 Android SDK AND AVD Manager 进行在线安装非常慢,在google中搜了搜,找到了用下 ...
- 用python可以免费下载音乐吗-使用python实现下载我们想听的歌曲,速度超快
这里发现一个可以下歌的工具pymusic-dl,很好用,当然付费歌曲是下不来的,集成了很多音乐库的歌曲 首先安装pymusic-dl pip install pymusic-dl 仔细发现就会知道,其 ...
- Javascript之字节跳动 浮点数与十六进制互相转换 有符号整数与十六进制互相转换 速度超快
查了很多,很少有人写这个的,偶尔找到的代码也有各种问题,要么是特殊情况算错,要么是速度太慢(速度大概是我这个的5%),遂自己写一个,目前应该是全网不要钱的博客里速度最快了吧,如果还有别的优化建议,欢迎 ...
- 速度超快!字节跳动开源序列推理引擎LightSeq
机器之心发布 机器之心编辑部 这应该是业界第一款完整支持 Transformer.GPT 等多种模型高速推理的开源引擎. 2017 年 Google 提出了 Transformer [1] 模型,之后 ...
- IT民工系列——c#操作PhotoBucket上传图片(再来一款图床备选方案,速度超快!)...
前言: 我是一名IT民工,热爱计算机 热爱软件.我从事.net平台开发也有几年了,专注c#.熟悉: ORM/RBAC/AOP/OO/持久层/数据流/工作流/信息流/企业系统开发/Excel等解密等. ...
- 速度超快,免驱动,不蓝屏的TL-XDS560V2仿真器
TL-XDS560V2仿真器简介 创龙TL-XDS560V2是一款快速.稳定.功能强大的XDS560v2仿真器,支持系统跟踪(System Trace)与网络调试模式,适用于TI绝大部分主流处理器平台 ...
- 蜻蜓大脑算法速度超快,AI科学家:拿来吧你
点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 兴坤 发自 凹非寺 量子位 报道 | 公众号 QbitAI 蜻蜓作为卓越的捕食者,能够 ...
- 开启6.0 sd卡读写权限_解了摄影师的燃眉之急:入手雷克沙TF卡,一卡多用速度超快...
这对我来说,是一个非常常规的周末. 带着相机去外拍的时候,顺便从快递代收点取雷克沙667x 256GB的TF卡.之所以买这款雷克沙TF卡,实际上有两个用途:一个是放到新的行车记录仪里面,去测试和记录一 ...
- 利用python下载我们想听的歌曲,速度超快
这里发现一个可以下歌的工具pymusic-dl,很好用,当然付费歌曲是下不来的,集成了很多音乐库的歌曲 首先安装pymusic-dl pip install pymusic-dl 仔细发现就会知道,其 ...
最新文章
- 检测单选按钮的值发生变化的事件
- Centos7 yum安装Python3.6环境,超简单
- 利用反射操作bean的属性和方法
- 充分条件反过来是必要条件吗_“充分必要条件”引发的现实思考
- Socket网络编程【获取本机IP】
- python怎么取出数字,如何在python中取数字的第n个数字
- MATLAB gui handles 未定义 及 理解
- 计算机科学概论_第1章_数据储存
- Powermill数控编程培训,潇洒模具三步教您精通cnc数控编程
- Mysql 启动命令详解
- 学好UI设计必备软件
- 【One Page】概率论复习|Probability Theory Review
- [办公软件word] 怎么让Worde2019显示所有批注?
- java看片_java – 如何正确查看片段
- 初始C语言——成绩等级划分
- 项目 - 基于Docker Swarm的高可用Web集群
- 哔哩哔哩(B站)的前端之路
- 看《Sicko》,有感
- [安卓]手机管家(八)防盗之业务逻辑
- wps 如何查找多年前的文档
热门文章
- oracle绑定变量赋值,Oracle教程之绑定变量
- Symmetric Pairs(连接、分组,聚合)
- 判断闰年 及其某天为这一年的多少天
- is 和 == 以及 编码和解码
- 错误---获取Input的值为空字符串
- [排序算法] 选择排序(2种)
- 在Mac系统下使用自己安装的PHP
- 谷歌地图最新hosts_如何查看2020最新版谷歌地球高精度卫星地图(附下载方法)...
- 安卓音频输出采样率_只有AirPods配有姓名吗?安卓的这些无线耳机也不错
- Liunx下HPCC(HPC Challenge)的安装运行