返回列表 发帖
已解决

能关于超文本传送协议

悬赏金额: 2500 个贝壳


最佳答案 chinanic
  1. <html>
  2.     <head>
  3.         <script language="JavaScript">
  4. /*
  5. * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined in FIPS PUB 180-1
  6. * By lizq
  7. * 2006-11-11
  8. */
  9. /*
  10. * Configurable variables.
  11. */
  12. var hexcase = 0;  /**//* hex output format. 0 - lowercase; 1 - uppercase        */
  13. var chrsz   = 8;  /**//* bits per input character. 8 - ASCII; 16 - Unicode      */

  14. /**//*
  15. * The main function to calculate message digest
  16. */
  17. function hex_sha1(s)
  18. {
  19.     return binb2hex(core_sha1(AlignSHA1(s)));
  20. }


  21. /**//*
  22. * Perform a simple self-test to see if the VM is working
  23. */
  24. function sha1_vm_test()
  25. {
  26.   return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
  27. }


  28. /**//*
  29. * Calculate the SHA-1 of an array of big-endian words, and a bit length
  30. */
  31. function core_sha1(blockArray)
  32. {
  33.   var x = blockArray;  //append padding

  34.   var w = Array(80);
  35.   var a =  1732584193;
  36.   var b = -271733879;
  37.   var c = -1732584194;
  38.   var d =  271733878;
  39.   var e = -1009589776;

  40.   for(var i = 0; i < x.length; i += 16)  //每次处理512位 16*32
  41.   {
  42.     var olda = a;
  43.     var oldb = b;
  44.     var oldc = c;
  45.     var oldd = d;
  46.     var olde = e;

  47.     for(var j = 0; j < 80; j++)  //对每个512位进行80步操作
  48.     {
  49.       if(j < 16) w[j] = x[i + j];
  50.       else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
  51.       
  52.       var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
  53.                        safe_add(safe_add(e, w[j]), sha1_kt(j)));
  54.       e = d;
  55.       d = c;
  56.       c = rol(b, 30);
  57.       b = a;
  58.       a = t;
  59.     }

  60.     a = safe_add(a, olda);
  61.     b = safe_add(b, oldb);
  62.     c = safe_add(c, oldc);
  63.     d = safe_add(d, oldd);
  64.     e = safe_add(e, olde);
  65.   }
  66.   return new Array(a, b, c, d, e);

  67. }


  68. /**//*
  69. * Perform the appropriate triplet combination function for the current iteration
  70. * 返回对应F函数的值
  71. */
  72. function sha1_ft(t, b, c, d)
  73. {
  74.   if(t < 20) return (b & c) | ((~b) & d);
  75.   if(t < 40) return b ^ c ^ d;
  76.   if(t < 60) return (b & c) | (b & d) | (c & d);
  77.   return b ^ c ^ d;  //t<80
  78. }


  79. /**//*
  80. * Determine the appropriate additive constant for the current iteration
  81. * 返回对应的Kt值
  82. */
  83. function sha1_kt(t)
  84. {
  85.   return (t < 20) ?  1518500249 : (t < 40) ?  1859775393 :
  86.          (t < 60) ? -1894007588 : -899497514;
  87. }


  88. /**//*
  89. * Add integers, wrapping at 2^32. This uses 16-bit operations internally
  90. * to work around bugs in some JS interpreters.
  91. * 将32位数拆成高16位和低16位分别进行相加,从而实现 MOD 2^32 的加法
  92. */
  93. function safe_add(x, y)
  94. {
  95.   var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  96.   var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  97.   return (msw << 16) | (lsw & 0xFFFF);
  98. }


  99. /**//*
  100. * Bitwise rotate a 32-bit number to the left.
  101. * 32位二进制数循环左移
  102. */
  103. function rol(num, cnt)
  104. {
  105.   return (num << cnt) | (num >>> (32 - cnt));
  106. }


  107. /**//*
  108. * The standard SHA1 needs the input string to fit into a block
  109. * This function align the input string to meet the requirement
  110. */
  111. function AlignSHA1(str){
  112.   var nblk=((str.length+8)>>6)+1, blks=new Array(nblk*16);
  113.   for(var i=0;i<nblk*16;i++)blks=0;
  114.   for(i=0;i<str.length;i++)
  115.     blks[i>>2]|=str.charCodeAt(i)<<(24-(i&3)*8);
  116.   blks[i>>2]|=0x80<<(24-(i&3)*8);
  117.   blks[nblk*16-1]=str.length*8;
  118.   return blks;
  119. }


  120. /**//*
  121. * Convert an array of big-endian words to a hex string.
  122. */
  123. function binb2hex(binarray)
  124. {
  125.   var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  126.   var str = "";
  127.   for(var i = 0; i < binarray.length * 4; i++)
  128.   {
  129.     str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
  130.            hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8  )) & 0xF);
  131.   }
  132.   return str;
  133. }

  134. /**//*
  135. * calculate MessageDigest accord to source message that inputted
  136. */
  137. function calcDigest()
  138. {
  139.     var digestM = hex_sha1(document.SHAForm.SourceMessage.value);
  140.     document.SHAForm.MessageDigest.value = digestM;
  141. }

  142.         </script>   
  143.         
  144.         <title>SHA-1算法JavaScript实现</title>

  145.     </head>
  146.    
  147.     <body>
  148.         <center>
  149.             <BR/>
  150.             <BR/>
  151.             <H2>SHA-1算法JavaScript实现</H2>
  152.             <BR/>
  153.             <form name="SHAForm">
  154.                  源消息:<input type="text" name="SourceMessage" size=40><BR>
  155.                 消息摘要:<input type="text" name="MessageDigest" size=40>
  156.                 <P>
  157.                 <input type="button"  value="计算消息摘要" onclick="calcDigest()">
  158.             </form>
  159.     </body>
  160. </html>
复制代码
Parkour.所有!

  1. <html>
  2.     <head>
  3.         <script language="JavaScript">
  4. /*
  5. * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined in FIPS PUB 180-1
  6. * By lizq
  7. * 2006-11-11
  8. */
  9. /*
  10. * Configurable variables.
  11. */
  12. var hexcase = 0;  /**//* hex output format. 0 - lowercase; 1 - uppercase        */
  13. var chrsz   = 8;  /**//* bits per input character. 8 - ASCII; 16 - Unicode      */

  14. /**//*
  15. * The main function to calculate message digest
  16. */
  17. function hex_sha1(s)
  18. {
  19.     return binb2hex(core_sha1(AlignSHA1(s)));
  20. }


  21. /**//*
  22. * Perform a simple self-test to see if the VM is working
  23. */
  24. function sha1_vm_test()
  25. {
  26.   return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
  27. }


  28. /**//*
  29. * Calculate the SHA-1 of an array of big-endian words, and a bit length
  30. */
  31. function core_sha1(blockArray)
  32. {
  33.   var x = blockArray;  //append padding

  34.   var w = Array(80);
  35.   var a =  1732584193;
  36.   var b = -271733879;
  37.   var c = -1732584194;
  38.   var d =  271733878;
  39.   var e = -1009589776;

  40.   for(var i = 0; i < x.length; i += 16)  //每次处理512位 16*32
  41.   {
  42.     var olda = a;
  43.     var oldb = b;
  44.     var oldc = c;
  45.     var oldd = d;
  46.     var olde = e;

  47.     for(var j = 0; j < 80; j++)  //对每个512位进行80步操作
  48.     {
  49.       if(j < 16) w[j] = x[i + j];
  50.       else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
  51.       
  52.       var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
  53.                        safe_add(safe_add(e, w[j]), sha1_kt(j)));
  54.       e = d;
  55.       d = c;
  56.       c = rol(b, 30);
  57.       b = a;
  58.       a = t;
  59.     }

  60.     a = safe_add(a, olda);
  61.     b = safe_add(b, oldb);
  62.     c = safe_add(c, oldc);
  63.     d = safe_add(d, oldd);
  64.     e = safe_add(e, olde);
  65.   }
  66.   return new Array(a, b, c, d, e);

  67. }


  68. /**//*
  69. * Perform the appropriate triplet combination function for the current iteration
  70. * 返回对应F函数的值
  71. */
  72. function sha1_ft(t, b, c, d)
  73. {
  74.   if(t < 20) return (b & c) | ((~b) & d);
  75.   if(t < 40) return b ^ c ^ d;
  76.   if(t < 60) return (b & c) | (b & d) | (c & d);
  77.   return b ^ c ^ d;  //t<80
  78. }


  79. /**//*
  80. * Determine the appropriate additive constant for the current iteration
  81. * 返回对应的Kt值
  82. */
  83. function sha1_kt(t)
  84. {
  85.   return (t < 20) ?  1518500249 : (t < 40) ?  1859775393 :
  86.          (t < 60) ? -1894007588 : -899497514;
  87. }


  88. /**//*
  89. * Add integers, wrapping at 2^32. This uses 16-bit operations internally
  90. * to work around bugs in some JS interpreters.
  91. * 将32位数拆成高16位和低16位分别进行相加,从而实现 MOD 2^32 的加法
  92. */
  93. function safe_add(x, y)
  94. {
  95.   var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  96.   var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  97.   return (msw << 16) | (lsw & 0xFFFF);
  98. }


  99. /**//*
  100. * Bitwise rotate a 32-bit number to the left.
  101. * 32位二进制数循环左移
  102. */
  103. function rol(num, cnt)
  104. {
  105.   return (num << cnt) | (num >>> (32 - cnt));
  106. }


  107. /**//*
  108. * The standard SHA1 needs the input string to fit into a block
  109. * This function align the input string to meet the requirement
  110. */
  111. function AlignSHA1(str){
  112.   var nblk=((str.length+8)>>6)+1, blks=new Array(nblk*16);
  113.   for(var i=0;i<nblk*16;i++)blks=0;
  114.   for(i=0;i<str.length;i++)
  115.     blks[i>>2]|=str.charCodeAt(i)<<(24-(i&3)*8);
  116.   blks[i>>2]|=0x80<<(24-(i&3)*8);
  117.   blks[nblk*16-1]=str.length*8;
  118.   return blks;
  119. }


  120. /**//*
  121. * Convert an array of big-endian words to a hex string.
  122. */
  123. function binb2hex(binarray)
  124. {
  125.   var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  126.   var str = "";
  127.   for(var i = 0; i < binarray.length * 4; i++)
  128.   {
  129.     str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
  130.            hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8  )) & 0xF);
  131.   }
  132.   return str;
  133. }

  134. /**//*
  135. * calculate MessageDigest accord to source message that inputted
  136. */
  137. function calcDigest()
  138. {
  139.     var digestM = hex_sha1(document.SHAForm.SourceMessage.value);
  140.     document.SHAForm.MessageDigest.value = digestM;
  141. }

  142.         </script>   
  143.         
  144.         <title>SHA-1算法JavaScript实现</title>

  145.     </head>
  146.    
  147.     <body>
  148.         <center>
  149.             <BR/>
  150.             <BR/>
  151.             <H2>SHA-1算法JavaScript实现</H2>
  152.             <BR/>
  153.             <form name="SHAForm">
  154.                  源消息:<input type="text" name="SourceMessage" size=40><BR>
  155.                 消息摘要:<input type="text" name="MessageDigest" size=40>
  156.                 <P>
  157.                 <input type="button"  value="计算消息摘要" onclick="calcDigest()">
  158.             </form>
  159.     </body>
  160. </html>
复制代码
天行健,君子以自强不息
地势坤,君子以厚德载物
黑色海岸线欢迎您

QQ群:7212260
致力于探索WEB技术精髓:http://www.bitechcn.com
点这里加我!

TOP

URL地址加密,如何还原?搞网站的应该都知道···请咨询站长!

TOP

就没个人跟我讲解下么
Parkour.所有!

TOP

工会

TOP

应该不能还原吧
家国破,故乡离,鸳鸯泣血各东西。江楼漫舞空垂泪,此恨绵绵无绝期

TOP

2500分
天空中不曾留下鸟飞的痕迹
但我们毕竟曾经努力的飞过

╱◥█◣ ╱◥█◣
︱田︱田︱︱田︱田︱
╬╬╬╬╬╬╬╬╬╬╬╬╬╬
      ● ╭○╮
    /█∨█\
      ∏    ∏  BLOG:http://blackleaf.thysea.com
天空中不曾留下鸟飞的痕迹
但我们毕竟曾经努力的飞过

TOP

368215f2 9b081702 675811fc dc46bf5 d6d0f4d7fd7f4dd01e543ff956fc2e167c713b73557856e939425ce8f33f3083b07129da23a0bdb75485f47a11cef2c89df004c932357dcddf063f84ef39f0a03a1ff1886 总共168个字节  起初感觉像md5之类 翻了翻应用密码学那本书 发现如果用sha可以解释出来 也就是类似md5的算法 也是不可逆的 但sha输出为160 剩余8个字节可以参照跌代计算来解释 解释的不足希望大家指点 只是个人见解 用于讨论。。
   什麼了不起的東西?什麼做了比沒做有意義?什麼明知失敗去失敗比看不到成敗還有價值?這世上可以被預料的悲劇多不勝數,何必浪費時間再....                     [118] - 崩壞寸前     EveryThing Is Free   CVE(CAN) ID: CAN-198*-0926   什麼了不起的東西?什麼做了比沒做有意義?什麼明知失 敗去失敗比看不到成敗還有價值?這世上可以被預料的悲劇多 不勝數,何必浪費時間再....                     [118] - 崩壞寸前    EveryThing Is Free  CVE(CAN) ID: CAN-198*-0926

TOP

一、SHA-1算法简介

消息认证作为一种重要的安全技术如今已被广泛地应用于网络信息交换领域,它的根本作用是允许通信的当事人验证所接受的消息为可信消息。如果消息、文件、文档或者其他的数据集合是真实的数据并且来自所声称的数据源,那么称这些数据集合是可信的。而在消息认证技术中通常都会用到一类特殊的数学算法-哈希算法,它占有极其重要的地位。哈希算法也即散列算法,其作用是对任何不定长的比特串(称为消息)计算出一个定长的比特串(称为消息摘要或散列值)。

目前常见的哈希算法有MD5、SHA-1和RIPEMD-160,而国内更倾向于MD5和SHA-1。就当前的情况来看,SHA-1由于其安全强度及运算效率方面的优势已经成为使用最为广泛的哈希算法了。

1.1 SHA-1算法概述

SHA-1算法由美国国家标准和技术协会(NIST)与美国国家安全局(NSA)设计,并且被美国政府采纳,成为美国国家标准。事实上SHA-1目前是全世界使用最为广泛的哈希算法,已经成为业界的事实标准。可以对长度不超过 比特的消息进行计算,输入以512位数据块为单位处理,产生160比特的消息摘要作为输出。该算法的处理流程大致分为5个步骤:

l        步骤1:附加填充比特。

对输入的数据进行填充,使得数据位长度对512求余的结果为448。填充比特串的最高位补一个1,其余位补0。附加填充总是要进行的,即使消息的长度满足所要求的长度。



l        步骤2:附加长度值。

将64比特加在报文后表示报文的原始长度,使报文长度为512比特的倍数。



l        步骤3:初始化MD缓存。

一个160位MD缓冲区用以保存中间和最终散列函数的结果。它可以表示为5个32位的寄存器(A,B,C,D,E)。初始化为:

A = 67452301    B = EFCDAB89    C = 98BADCFE

D = 10325476    E = C3D2E1F0

前四个与MD5相同,但存储为big-endian format。



l        步骤4:以512比特(16个字)分组处理消息。

此算法的核心就是称为压缩函数(compression function)的模块,这个模块包括4次循环,每次循环又包含20个处理步骤。4次循环具有相似的结构,但每次循环使用不同的基本逻辑函数,称为 、 、 和 。



l        步骤5:输出。




全部L个512位数据块处理完毕后,输出160位消息摘要。

CV = IV

CVq+1 =  SUM32(CVq,ABCDE q)

MD = CVL

其中: = ABCDE的初始值;

ABCDE q对第q轮消息数据块处理最后一轮所得的结果;

L = 数据块的个数;

SUM32= 对每一个输入对的字单独相加,使用 MOD 2^32 的加法;

MD = 最后的消息摘要值;

  



二、SHA-1算法的程序实现

算法采用JavaScript实现,JavaScript是一种流行的脚本语言,它是在浏览器中解释执行的,因此不需要编译。整个程序的形式是一个HTML网页文件,当打开此网页时,程序会在浏览器中解释执行。(部分参照网络源代码)

2.1 算法程序结构

整个程序由9个函数组成,分别介绍如下:

l        function hex_sha1(s)

主函数根据输入的消息字符串计算消息摘要,返回十六进制表示的消息摘要。



l        function core_sha1(blockArray)

计算消息摘要的核心函数,输入为已经附加填充位和附加长度值的消息。以数值数组表示,数组中的每一项均为32位bit表示的数值。输出为长度为5的数值数组,对应160位的消息摘要。



l        function AlignSHA1(str)

对消息进行附加填充位和附加长度。输入为消息字符串,输出为已经附加填充位和附加长度值的消息。



l        function sha1_ft(t, b, c, d)

根据t值返回相应得压缩函数中用到的f函数。



l        function sha1_kt(t)

根据t值返回相应得压缩函数中用到的K值。



l        function safe_add(x, y)

对输入的两个32位数值进行 mod  的加法。



l        function rol(num, cnt)

对输入的32位的num二进制数进行循环左移。



l        function binb2hex(binarray)

将输入的二进制数组转化为十六进制的字符串。



l        function calcDigest()

根据用户输入的源消息计算消息摘要,JavaScript事件函数。
天行健,君子以自强不息
地势坤,君子以厚德载物
黑色海岸线欢迎您

QQ群:7212260
致力于探索WEB技术精髓:http://www.bitechcn.com
点这里加我!

TOP


chinanic要不要我送你2500??
Parkour.所有!

TOP

chinanic 确实是厉害,高手。呵呵 ·

TOP

返回列表 回复 发帖