2013-07-24 22 views
2

我試圖在Javascript中加載頁面(基本上要求google.com,加載google.com源代碼)以及那麼MD5散列(或SHA-1,並沒有太大區別),然後將其與我已經確認這是google.com(作爲示例)的值進行比較。如何使用Javascript和MD5加載頁面以確保它是我們正在尋找的頁面

澄清,這裏是一個更好的例子:

我與URL(myurl.com)的應用程序。

的源代碼看起來是這樣的:<head></head><body></body>

我希望能夠加載使用Javascript,哈希該源代碼,內容爲值,比較該值具有相同內容的預先計算哈希值然後當且僅當它們相等才顯示結果。否則,我知道我沒有在這個頁面上加載完全相同的內容,並且會顯示某種錯誤。

請讓我知道,如果這不夠清楚,或者如果需要更多的信息。

+0

爲什麼不使用SSL? –

+0

@KeesdeWit,我正在尋找這個實施,但如果你有其他建議,請隨時提及他們,我很想聽到更多。 – user220755

+0

請發佈您的代碼和更具體的問題,然後我們會提供幫助。如果您只是不知道從哪裏開始,請嘗試在node.js'http.request'或cscript'WinHttpRequest'或'jQuery.ajax()'上找到相關教程。 –

回答

1

使用jQuery下載頁面,cross-domain-ajax用於跨域請求。

function utf8_encode (string) { 

    string = (string+'').replace(/\r\n/g, "\n").replace(/\r/g, "\n"); 

    var utftext = ""; 
    var start, end; 
    var stringl = 0; 

    start = end = 0; 
    stringl = string.length; 
    for (var n = 0; n < stringl; n++) { 
     var c1 = string.charCodeAt(n); 
     var enc = null; 

     if (c1 < 128) { 
      end++; 
     } else if((c1 > 127) && (c1 < 2048)) { 
      enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128); 
     } else { 
      enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128); 
     } 
     if (enc != null) { 
      if (end > start) { 
       utftext += string.substring(start, end); 
      } 
      utftext += enc; 
      start = end = n+1; 
     } 
    } 

    if (end > start) { 
     utftext += string.substring(start, string.length); 
    } 

    return utftext; 
} 

function md5 (str) { 
    // http://kevin.vanzonneveld.net 
    // + original by: Webtoolkit.info (http://www.webtoolkit.info/) 
    // + namespaced by: Michael White (http://getsprink.com) 
    // + tweaked by: Jack 
    // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // +  input by: Brett Zamir (http://brett-zamir.me) 
    // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // - depends on: utf8_encode 
    // *  example 1: md5('Kevin van Zonneveld'); 
    // *  returns 1: '6e658d4bfcb59cc13f96c14450ac40b9' 
    var xl; 

    var rotateLeft = function (lValue, iShiftBits) { 
    return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits)); 
    }; 

    var addUnsigned = function (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); 
    } 
    }; 

    var _F = function (x, y, z) { 
    return (x & y) | ((~x) & z); 
    }; 
    var _G = function (x, y, z) { 
    return (x & z) | (y & (~z)); 
    }; 
    var _H = function (x, y, z) { 
    return (x^y^z); 
    }; 
    var _I = function (x, y, z) { 
    return (y^(x | (~z))); 
    }; 

    var _FF = function (a, b, c, d, x, s, ac) { 
    a = addUnsigned(a, addUnsigned(addUnsigned(_F(b, c, d), x), ac)); 
    return addUnsigned(rotateLeft(a, s), b); 
    }; 

    var _GG = function (a, b, c, d, x, s, ac) { 
    a = addUnsigned(a, addUnsigned(addUnsigned(_G(b, c, d), x), ac)); 
    return addUnsigned(rotateLeft(a, s), b); 
    }; 

    var _HH = function (a, b, c, d, x, s, ac) { 
    a = addUnsigned(a, addUnsigned(addUnsigned(_H(b, c, d), x), ac)); 
    return addUnsigned(rotateLeft(a, s), b); 
    }; 

    var _II = function (a, b, c, d, x, s, ac) { 
    a = addUnsigned(a, addUnsigned(addUnsigned(_I(b, c, d), x), ac)); 
    return addUnsigned(rotateLeft(a, s), b); 
    }; 

    var convertToWordArray = function (str) { 
    var lWordCount; 
    var lMessageLength = str.length; 
    var lNumberOfWords_temp1 = lMessageLength + 8; 
    var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64))/64; 
    var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16; 
    var lWordArray = new 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] | (str.charCodeAt(lByteCount) << lBytePosition)); 
     lByteCount++; 
    } 
    lWordCount = (lByteCount - (lByteCount % 4))/4; 
    lBytePosition = (lByteCount % 4) * 8; 
    lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition); 
    lWordArray[lNumberOfWords - 2] = lMessageLength << 3; 
    lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; 
    return lWordArray; 
    }; 

    var wordToHex = function (lValue) { 
    var wordToHexValue = "", 
     wordToHexValue_temp = "", 
     lByte, lCount; 
    for (lCount = 0; lCount <= 3; lCount++) { 
     lByte = (lValue >>> (lCount * 8)) & 255; 
     wordToHexValue_temp = "0" + lByte.toString(16); 
     wordToHexValue = wordToHexValue + wordToHexValue_temp.substr(wordToHexValue_temp.length - 2, 2); 
    } 
    return wordToHexValue; 
    }; 

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

    str = utf8_encode(str); 
    x = convertToWordArray(str); 
    a = 0x67452301; 
    b = 0xEFCDAB89; 
    c = 0x98BADCFE; 
    d = 0x10325476; 

    xl = x.length; 
    for (k = 0; k < xl; k += 16) { 
    AA = a; 
    BB = b; 
    CC = c; 
    DD = d; 
    a = _FF(a, b, c, d, x[k + 0], S11, 0xD76AA478); 
    d = _FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756); 
    c = _FF(c, d, a, b, x[k + 2], S13, 0x242070DB); 
    b = _FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE); 
    a = _FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF); 
    d = _FF(d, a, b, c, x[k + 5], S12, 0x4787C62A); 
    c = _FF(c, d, a, b, x[k + 6], S13, 0xA8304613); 
    b = _FF(b, c, d, a, x[k + 7], S14, 0xFD469501); 
    a = _FF(a, b, c, d, x[k + 8], S11, 0x698098D8); 
    d = _FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF); 
    c = _FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1); 
    b = _FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE); 
    a = _FF(a, b, c, d, x[k + 12], S11, 0x6B901122); 
    d = _FF(d, a, b, c, x[k + 13], S12, 0xFD987193); 
    c = _FF(c, d, a, b, x[k + 14], S13, 0xA679438E); 
    b = _FF(b, c, d, a, x[k + 15], S14, 0x49B40821); 
    a = _GG(a, b, c, d, x[k + 1], S21, 0xF61E2562); 
    d = _GG(d, a, b, c, x[k + 6], S22, 0xC040B340); 
    c = _GG(c, d, a, b, x[k + 11], S23, 0x265E5A51); 
    b = _GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA); 
    a = _GG(a, b, c, d, x[k + 5], S21, 0xD62F105D); 
    d = _GG(d, a, b, c, x[k + 10], S22, 0x2441453); 
    c = _GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681); 
    b = _GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8); 
    a = _GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6); 
    d = _GG(d, a, b, c, x[k + 14], S22, 0xC33707D6); 
    c = _GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87); 
    b = _GG(b, c, d, a, x[k + 8], S24, 0x455A14ED); 
    a = _GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905); 
    d = _GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8); 
    c = _GG(c, d, a, b, x[k + 7], S23, 0x676F02D9); 
    b = _GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A); 
    a = _HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942); 
    d = _HH(d, a, b, c, x[k + 8], S32, 0x8771F681); 
    c = _HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122); 
    b = _HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C); 
    a = _HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44); 
    d = _HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9); 
    c = _HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60); 
    b = _HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70); 
    a = _HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6); 
    d = _HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA); 
    c = _HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085); 
    b = _HH(b, c, d, a, x[k + 6], S34, 0x4881D05); 
    a = _HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039); 
    d = _HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5); 
    c = _HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8); 
    b = _HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665); 
    a = _II(a, b, c, d, x[k + 0], S41, 0xF4292244); 
    d = _II(d, a, b, c, x[k + 7], S42, 0x432AFF97); 
    c = _II(c, d, a, b, x[k + 14], S43, 0xAB9423A7); 
    b = _II(b, c, d, a, x[k + 5], S44, 0xFC93A039); 
    a = _II(a, b, c, d, x[k + 12], S41, 0x655B59C3); 
    d = _II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92); 
    c = _II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D); 
    b = _II(b, c, d, a, x[k + 1], S44, 0x85845DD1); 
    a = _II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F); 
    d = _II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0); 
    c = _II(c, d, a, b, x[k + 6], S43, 0xA3014314); 
    b = _II(b, c, d, a, x[k + 13], S44, 0x4E0811A1); 
    a = _II(a, b, c, d, x[k + 4], S41, 0xF7537E82); 
    d = _II(d, a, b, c, x[k + 11], S42, 0xBD3AF235); 
    c = _II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB); 
    b = _II(b, c, d, a, x[k + 9], S44, 0xEB86D391); 
    a = addUnsigned(a, AA); 
    b = addUnsigned(b, BB); 
    c = addUnsigned(c, CC); 
    d = addUnsigned(d, DD); 
    } 

    var temp = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d); 

    return temp.toLowerCase(); 
} 


$(document).ready(function() 
{ 
    $.get("http://www.google.com/", function(page) 
    { 
     if(md5(page) == "1441a7909c087dbbe7ce59881b9df8b9") 
      console.log("matches"); 
     else 
      console.log("Does not match"); 
    }); 
}); 
+0

這很酷,謝謝你提供這個。但是,在給端口指定url時(例如:https://google.com:8080)或類似的東西只是不返回任何內容,這不起作用。這是有原因的嗎? – user220755

+0

@ user220755不確定 – John

相關問題