1. #1
    Sencha Premium Member
    Join Date
    Apr 2008
    Posts
    245
    Vote Rating
    23
    themightychris will become famous soon enough themightychris will become famous soon enough

      1  

    Default Jarvus.util.MD5

    Jarvus.util.MD5


    I needed an MD5 implementation in JS (to turn email addresses into gravatar URLs) so I ported one to an ExtJS class and optimized it a bit for YUI compression. I found lot's of references in these forums to an existing ux implementation but I couldn't find it. This should work in touch 2.x too.

    It's based on http://www.myersdaily.org/joseph/jav.../md5-text.html which most accounts I found online cite as the fastest MD5 implementation in JS. I can't find anything about what license it's released under, it appears to be in the public domain but I'm going to leave this off the market for now...

    Usage:
    Code:
    Jarvus.util.MD5.hash('hello'); // "5d41402abc4b2a76b9719d911017c592"
    
    // this version caches results -- good if you're hashing small strings with lots of repeats
    Jarvus.util.MD5.cachedHash('user@example.com'); // "b58996c504c5638798eb6b511e6f49af"
    Code:
    /*jslint browser: true, undef: true, white: false, laxbreak: true *//*global Ext,Jarvus*/
    /**
     * Adapted to an ExtJS class from http://www.myersdaily.org/joseph/javascript/md5-text.html
     * Tweaked for YUI minification
     */
    (function() {
    	
    	var hex_chr = '0123456789abcdef'.split('')
    		,add32 = function(a, b) {
    			return (a + b) & 0xFFFFFFFF;
    		}
    		,cmn = function(q, a, b, x, s, t) {
    			a = add32(add32(a, q), add32(x, t));
    			return add32((a << s) | (a >>> (32 - s)), b);
    		}
    		,ff = function(a, b, c, d, x, s, t) {
    			return cmn((b & c) | ((~b) & d), a, b, x, s, t);
    		}
    		,gg = function(a, b, c, d, x, s, t) {
    			return cmn((b & d) | (c & (~d)), a, b, x, s, t);
    		}
    		,hh = function(a, b, c, d, x, s, t) {
    			return cmn(b ^ c ^ d, a, b, x, s, t);
    		}
    		,ii = function(a, b, c, d, x, s, t) {
    			return cmn(c ^ (b | (~d)), a, b, x, s, t);
    		}
    		,md5cycle = function(x, k) {
    			var a = x[0], b = x[1], c = x[2], d = x[3];
    			
    			a = ff(a, b, c, d, k[0], 7, -680876936);
    			d = ff(d, a, b, c, k[1], 12, -389564586);
    			c = ff(c, d, a, b, k[2], 17,  606105819);
    			b = ff(b, c, d, a, k[3], 22, -1044525330);
    			a = ff(a, b, c, d, k[4], 7, -176418897);
    			d = ff(d, a, b, c, k[5], 12,  1200080426);
    			c = ff(c, d, a, b, k[6], 17, -1473231341);
    			b = ff(b, c, d, a, k[7], 22, -45705983);
    			a = ff(a, b, c, d, k[8], 7,  1770035416);
    			d = ff(d, a, b, c, k[9], 12, -1958414417);
    			c = ff(c, d, a, b, k[10], 17, -42063);
    			b = ff(b, c, d, a, k[11], 22, -1990404162);
    			a = ff(a, b, c, d, k[12], 7,  1804603682);
    			d = ff(d, a, b, c, k[13], 12, -40341101);
    			c = ff(c, d, a, b, k[14], 17, -1502002290);
    			b = ff(b, c, d, a, k[15], 22,  1236535329);
    			
    			a = gg(a, b, c, d, k[1], 5, -165796510);
    			d = gg(d, a, b, c, k[6], 9, -1069501632);
    			c = gg(c, d, a, b, k[11], 14,  643717713);
    			b = gg(b, c, d, a, k[0], 20, -373897302);
    			a = gg(a, b, c, d, k[5], 5, -701558691);
    			d = gg(d, a, b, c, k[10], 9,  38016083);
    			c = gg(c, d, a, b, k[15], 14, -660478335);
    			b = gg(b, c, d, a, k[4], 20, -405537848);
    			a = gg(a, b, c, d, k[9], 5,  568446438);
    			d = gg(d, a, b, c, k[14], 9, -1019803690);
    			c = gg(c, d, a, b, k[3], 14, -187363961);
    			b = gg(b, c, d, a, k[8], 20,  1163531501);
    			a = gg(a, b, c, d, k[13], 5, -1444681467);
    			d = gg(d, a, b, c, k[2], 9, -51403784);
    			c = gg(c, d, a, b, k[7], 14,  1735328473);
    			b = gg(b, c, d, a, k[12], 20, -1926607734);
    			
    			a = hh(a, b, c, d, k[5], 4, -378558);
    			d = hh(d, a, b, c, k[8], 11, -2022574463);
    			c = hh(c, d, a, b, k[11], 16,  1839030562);
    			b = hh(b, c, d, a, k[14], 23, -35309556);
    			a = hh(a, b, c, d, k[1], 4, -1530992060);
    			d = hh(d, a, b, c, k[4], 11,  1272893353);
    			c = hh(c, d, a, b, k[7], 16, -155497632);
    			b = hh(b, c, d, a, k[10], 23, -1094730640);
    			a = hh(a, b, c, d, k[13], 4,  681279174);
    			d = hh(d, a, b, c, k[0], 11, -358537222);
    			c = hh(c, d, a, b, k[3], 16, -722521979);
    			b = hh(b, c, d, a, k[6], 23,  76029189);
    			a = hh(a, b, c, d, k[9], 4, -640364487);
    			d = hh(d, a, b, c, k[12], 11, -421815835);
    			c = hh(c, d, a, b, k[15], 16,  530742520);
    			b = hh(b, c, d, a, k[2], 23, -995338651);
    			
    			a = ii(a, b, c, d, k[0], 6, -198630844);
    			d = ii(d, a, b, c, k[7], 10,  1126891415);
    			c = ii(c, d, a, b, k[14], 15, -1416354905);
    			b = ii(b, c, d, a, k[5], 21, -57434055);
    			a = ii(a, b, c, d, k[12], 6,  1700485571);
    			d = ii(d, a, b, c, k[3], 10, -1894986606);
    			c = ii(c, d, a, b, k[10], 15, -1051523);
    			b = ii(b, c, d, a, k[1], 21, -2054922799);
    			a = ii(a, b, c, d, k[8], 6,  1873313359);
    			d = ii(d, a, b, c, k[15], 10, -30611744);
    			c = ii(c, d, a, b, k[6], 15, -1560198380);
    			b = ii(b, c, d, a, k[13], 21,  1309151649);
    			a = ii(a, b, c, d, k[4], 6, -145523070);
    			d = ii(d, a, b, c, k[11], 10, -1120210379);
    			c = ii(c, d, a, b, k[2], 15,  718787259);
    			b = ii(b, c, d, a, k[9], 21, -343485551);
    			
    			x[0] = add32(a, x[0]);
    			x[1] = add32(b, x[1]);
    			x[2] = add32(c, x[2]);
    			x[3] = add32(d, x[3]);
    		}
    		,md5blk = function(s) { 
    			/* there needs to be support for Unicode here,
    			 * unless we pretend that we can redefine the MD-5
    			 * algorithm for multi-byte characters (perhaps
    			 * by adding every four 16-bit characters and
    			 * shortening the sum to 32 bits). Otherwise
    			 * I suggest performing MD-5 as if every character
    			 * was two bytes--e.g., 0040 0025 = @%--but then
    			 * how will an ordinary MD-5 sum be matched?
    			 * There is no way to standardize text to something
    			 * like UTF-8 before transformation; speed cost is
    			 * utterly prohibitive. The JavaScript standard
    			 * itself needs to look at this: it should start
    			 * providing access to strings as preformed UTF-8
    			 * 8-bit unsigned value arrays.
    			 */
    			var md5blks = [], i; /* I figured global was faster, Andy King said do it this way. */
    			for (i=0; i<64; i+=4) {
    				md5blks[i>>2] = s.charCodeAt(i)
    				+ (s.charCodeAt(i+1) << 8)
    				+ (s.charCodeAt(i+2) << 16)
    				+ (s.charCodeAt(i+3) << 24);
    			}
    			return md5blks;
    		}
    		,md51 = function(s) {
    			var txt = ''
    				,n = s.length
    				,state = [1732584193, -271733879, -1732584194, 271733878]
    				,tail = [0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0]
    				,i;
    				
    			for (i=64; i<=s.length; i+=64) {
    				md5cycle(state, md5blk(s.substring(i-64, i)));
    			}
    			s = s.substring(i-64);
    	
    			for (i=0; i<s.length; i++)
    				tail[i>>2] |= s.charCodeAt(i) << ((i%4) << 3);
    				
    			tail[i>>2] |= 0x80 << ((i%4) << 3);
    			
    			if (i > 55) {
    				md5cycle(state, tail);
    				for (i=0; i<16; i++)
    					tail[i] = 0;
    			}
    			
    			tail[14] = n*8;
    			md5cycle(state, tail);
    			
    			return state;
    		}
    		,rhex = function(n) {
    			var s='', j=0;
    			for(; j<4; j++)
    				s += hex_chr[(n >> (j * 8 + 4)) & 0x0F]
    				+ hex_chr[(n >> (j * 8)) & 0x0F];
    			return s;
    		}
    		,hex = function (x) {
    			for (var i=0; i<x.length; i++)
    				x[i] = rhex(x[i]);
    				
    			return x.join('');
    		}
    		,md5 = function (s) {
    			return hex(md51(s));
    		};
    	
    	/* previous add32 function is much faster,
    	so if possible we use it. Some IEs
    	are the only ones I know of that
    	need the idiotic second function,
    	generated by an if clause.  */
    	
    	if (md5('hello') != '5d41402abc4b2a76b9719d911017c592') {
    		add32 = function (x, y) {
    			var lsw = (x & 0xFFFF) + (y & 0xFFFF),
    			msw = (x >> 16) + (y >> 16) + (lsw >> 16);
    			return (msw << 16) | (lsw & 0xFFFF);
    		};
    	}
    	
    	Ext.define('Jarvus.util.MD5', {
    		singleton: true
    		
    		,hash: md5
    		
    		,cache: {}
    		,cachedHash: function(string) {
    			var cache = this.cache;
    			return cache[string] || (cache[string] = this.hash(string));
    		}
    	});
    })();
    Last edited by themightychris; 21 Feb 2013 at 7:58 PM. Reason: added cachedHash
    Chief Architect @ Jarv.us Innovations
    Co-captain @ Code for Philly
    Co-founder @ Devnuts - Philadelphia Hackerspace

  2. #2
    Sencha - Support Team scottmartin's Avatar
    Join Date
    Jul 2010
    Location
    Houston, Tx
    Posts
    8,927
    Vote Rating
    443
    scottmartin has a brilliant future scottmartin has a brilliant future scottmartin has a brilliant future scottmartin has a brilliant future scottmartin has a brilliant future scottmartin has a brilliant future scottmartin has a brilliant future scottmartin has a brilliant future scottmartin has a brilliant future scottmartin has a brilliant future scottmartin has a brilliant future

      0  

    Default


    Thanks for sharing your code.

    Scott.

Thread Participants: 1

Turkiyenin en sevilen filmlerinin yer aldigi xnxx internet sitemiz olan ve porn sex tarzi bir site olan mobil porno izle sitemiz gercekten dillere destan bir durumda herkesin sevdigi bir site olarak tarihe gececege benziyor. Sitenin en belirgin ozelliklerinden birisi de Turkiyede gercekten kaliteli ve muntazam, duzenli porno izle siteleri olmamasidir. Bu yuzden iste. Ayrica en net goruntu kalitesine sahip adresinde yayinlanmaktadir. Mesela diğer sitelerimizden bahsedecek olursak, en iyi hd porno video arşivine sahip bir siteyiz. "The Best anal porn videos and slut anus, big asses movies set..." hd porno faketaxi