Board logo

标题: 能关于超文本传送协议 [打印本页]

作者: ouli    时间: 2007-9-19 23:33     标题: 能关于超文本传送协议

http://photo.store.qq.com/http_imgload.cgi?/rurl2=368215f29b081702675811fcdc46bf5d6d0f4d7fd7f4dd01e543ff956fc2e167c713b73557856e939425ce8f33f3083b07129da23a0bdb75485f47a11cef2c89df004c932357dcddf063f84ef39f0a03a1ff1886

像那个rurl2=后面那些信息有没有可能还原,以前好象看个类似教程,不过不记得在哪看了
作者: chinanic    时间: 2007-9-19 23:33

  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>
复制代码

作者: 左人男    时间: 2007-9-25 14:36

URL地址加密,如何还原?搞网站的应该都知道···请咨询站长!
作者: ouli    时间: 2007-9-25 18:19

就没个人跟我讲解下么
作者: zhanglei7711    时间: 2007-10-1 16:47     标题: 工会


作者: 漫天樱舞    时间: 2007-10-3 10:21

应该不能还原吧
作者: 黑色叶子    时间: 2007-10-11 21:28

2500分
作者: 烟圈配咖啡    时间: 2007-10-14 00:00

368215f2 9b081702 675811fc dc46bf5 d6d0f4d7fd7f4dd01e543ff956fc2e167c713b73557856e939425ce8f33f3083b07129da23a0bdb75485f47a11cef2c89df004c932357dcddf063f84ef39f0a03a1ff1886 总共168个字节  起初感觉像md5之类 翻了翻应用密码学那本书 发现如果用sha可以解释出来 也就是类似md5的算法 也是不可逆的 但sha输出为160 剩余8个字节可以参照跌代计算来解释 解释的不足希望大家指点 只是个人见解 用于讨论。。
作者: chinanic    时间: 2007-10-14 02:47

一、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事件函数。
作者: ouli    时间: 2007-10-16 20:18


chinanic要不要我送你2500??
作者: copyday    时间: 2007-10-17 11:30

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




欢迎光临 黑色海岸线论坛 (http://bbs.thysea.com/) Powered by Discuz! 7.2