Hướng dẫn javascript md5

Hàm MD5 thường được sử dụng để mã hóa mật khẩu và lưu vào trong CSDL, tuy nhiên trong Javascript hiện nay vẫn chưa hỗ trợ hàm mã hóa này, vì vậy trong bài này mình sẽ giới thiệu với bạn hàm mã hóa MD5 được viết bằng Javascript.

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

var md5 = function [string] {

        function RotateLeft[lValue, iShiftBits] {
            return [lValue>[32-iShiftBits]];
        }

        function AddUnsigned[lX,lY] {
            var lX4,lY4,lX8,lY8,lResult;
            lX8 = [lX & 0x80000000];
            lY8 = [lY & 0x80000000];
            lX4 = [lX & 0x40000000];
            lY4 = [lY & 0x40000000];
            lResult = [lX & 0x3FFFFFFF]+[lY & 0x3FFFFFFF];
            if [lX4 & lY4] {
                return [lResult ^ 0x80000000 ^ lX8 ^ lY8];
            }
            if [lX4 | lY4] {
                if [lResult & 0x40000000] {
                    return [lResult ^ 0xC0000000 ^ lX8 ^ lY8];
                } else {
                    return [lResult ^ 0x40000000 ^ lX8 ^ lY8];
                }
            } else {
                return [lResult ^ lX8 ^ lY8];
            }
        }

        function F[x,y,z] {
            return [x & y] | [[~x] & z];
        }
        function G[x,y,z] {
            return [x & z] | [y & [~z]];
        }
        function H[x,y,z] {
            return [x ^ y ^ z];
        }
        function I[x,y,z] {
            return [y ^ [x | [~z]]];
        }

        function FF[a,b,c,d,x,s,ac] {
            a = AddUnsigned[a, AddUnsigned[AddUnsigned[F[b, c, d], x], ac]];
            return AddUnsigned[RotateLeft[a, s], b];
        };

        function GG[a,b,c,d,x,s,ac] {
            a = AddUnsigned[a, AddUnsigned[AddUnsigned[G[b, c, d], x], ac]];
            return AddUnsigned[RotateLeft[a, s], b];
        };

        function HH[a,b,c,d,x,s,ac] {
            a = AddUnsigned[a, AddUnsigned[AddUnsigned[H[b, c, d], x], ac]];
            return AddUnsigned[RotateLeft[a, s], b];
        };

        function II[a,b,c,d,x,s,ac] {
            a = AddUnsigned[a, AddUnsigned[AddUnsigned[I[b, c, d], x], ac]];
            return AddUnsigned[RotateLeft[a, s], b];
        };

        function ConvertToWordArray[string] {
            var lWordCount;
            var lMessageLength = string.length;
            var lNumberOfWords_temp1=lMessageLength + 8;
            var lNumberOfWords_temp2=[lNumberOfWords_temp1-[lNumberOfWords_temp1 % 64]]/64;
            var lNumberOfWords = [lNumberOfWords_temp2+1]*16;
            var lWordArray=Array[lNumberOfWords-1];
            var lBytePosition = 0;
            var lByteCount = 0;
            while [ lByteCount < lMessageLength ] {
                lWordCount = [lByteCount-[lByteCount % 4]]/4;
                lBytePosition = [lByteCount % 4]*8;
                lWordArray[lWordCount] = [lWordArray[lWordCount] | [string.charCodeAt[lByteCount] 127] && [c < 2048]] {
                    utftext += String.fromCharCode[[c >> 6] | 192];
                    utftext += String.fromCharCode[[c & 63] | 128];
                }
                else {
                    utftext += String.fromCharCode[[c >> 12] | 224];
                    utftext += String.fromCharCode[[[c >> 6] & 63] | 128];
                    utftext += String.fromCharCode[[c & 63] | 128];
                }

            }

            return utftext;
        };

        var x=Array[];
        var k,AA,BB,CC,DD,a,b,c,d;
        var S11=7, S12=12, S13=17, S14=22;
        var S21=5, S22=9 , S23=14, S24=20;
        var S31=4, S32=11, S33=16, S34=23;
        var S41=6, S42=10, S43=15, S44=21;

        string = Utf8Encode[string];

        x = ConvertToWordArray[string];

        a = 0x67452301;
        b = 0xEFCDAB89;
        c = 0x98BADCFE;
        d = 0x10325476;

        for [k=0;k

Chủ Đề