⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 11.htm

📁 普通中的最普通算法
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                            style="WORD-BREAK: break-all">
                              <TABLE id=SHA-1摘要算法源码(java版) align=left 
                                border=0><TBODY>
                                <TR>
                                <TD>
                                <DIV class=guanggao id=SHA-1摘要算法源码(java版)><SPAN 
                                id=ad3></SPAN></DIV>
                                <DIV class=guanggao id=SHA-1摘要算法源码(java版)><SPAN 
                                id=contentAdv></SPAN></DIV></TD></TR></TBODY></TABLE>
                              <DIV id=VbellShow>public class SHA1 
                              {<BR>&nbsp;&nbsp;&nbsp; private final int[] abcde 
                              = 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 
                              0xc3d2e1f0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              }; 
                              <P>&nbsp;&nbsp;&nbsp; // 
                              摘要数据存储数组<BR>&nbsp;&nbsp;&nbsp; private int[] 
                              digestInt = new int[5];</P>
                              <P>&nbsp;&nbsp;&nbsp; // 
                              计算过程中的临时数据存储数组<BR>&nbsp;&nbsp;&nbsp; private int[] 
                              tmpData = new int[80];</P>
                              <P>&nbsp;&nbsp;&nbsp; // 
                              计算sha-1摘要<BR>&nbsp;&nbsp;&nbsp; private int 
                              process_input_bytes(byte[] bytedata) 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
                              初试化常量<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              System.arraycopy(abcde, 0, digestInt, 0, 
                              abcde.length);</P>
                              <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
                              格式化输入字节数组,补10及长度数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              byte[] newbyte = 
byteArrayFormatData(bytedata);</P>
                              <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
                              获取数据摘要计算的数据单元个数<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              int MCount = newbyte.length / 64;</P>
                              <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
                              循环对每个数据单元进行摘要计算<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              for (int pos = 0; pos &lt; MCount; pos++) 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              // 
                              将每个单元的数据转换成16个整型数据,并保存到tmpData的前16个数组元素中<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              for (int j = 0; j &lt; 16; j++) 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              tmpData[j] = byteArrayToInt(newbyte, (pos * 64) + 
                              (j * 
                              4));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              }</P>
                              <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              // 
                              摘要计算函数<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              encrypt();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              }</P>
                              <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              return 20;<BR>&nbsp;&nbsp;&nbsp; }</P>
                              <P>&nbsp;&nbsp;&nbsp; // 
                              格式化输入字节数组格式<BR>&nbsp;&nbsp;&nbsp; private byte[] 
                              byteArrayFormatData(byte[] bytedata) 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
                              补0数量<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              int zeros = 0;</P>
                              <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
                              补位后总位数<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              int size = 0;</P>
                              <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
                              原始数据长度<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              int n = bytedata.length;</P>
                              <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
                              模64后的剩余位数<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              int m = n % 64;</P>
                              <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
                              计算添加0的个数以及添加10后的总长度<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              if (m &lt; 56) 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              zeros = 55 - 
                              m;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              size = n - m + 
                              64;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              } else if (m == 56) 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              zeros = 
                              63;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              size = n + 8 + 
                              64;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              } else 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              zeros = 63 - m + 
                              56;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              size = (n + 64) - m + 
                              64;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              }</P>
                              <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
                              补位后生成的新数组内容<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              byte[] newbyte = new 
                              byte[size];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              // 
                              复制数组的前面部分<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              System.arraycopy(bytedata, 0, newbyte, 0, n);</P>
                              <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
                              获得数组Append数据元素的位置<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              int l = 
                              n;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              // 
                              补1操作<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              newbyte[l++] = (byte) 0x80;</P>
                              <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
                              补0操作<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              for (int i = 0; i &lt; zeros; i++) 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              newbyte[l++] = (byte) 
                              0x00;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              }</P>
                              <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 
                              计算数据长度,补数据长度位共8字节,长整型<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              long N = (long) n * 
                              8;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              byte h8 = (byte) (N &amp; 
                              0xFF);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              byte h7 = (byte) ((N &gt;&gt; 8) &amp; 
                              0xFF);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              byte h6 = (byte) ((N &gt;&gt; 16) &amp; 
                              0xFF);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              byte h5 = (byte) ((N &gt;&gt; 24) &amp; 
                              0xFF);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              byte h4 = (byte) ((N &gt;&gt; 32) &amp; 
                              0xFF);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              byte h3 = (byte) ((N &gt;&gt; 40) &amp; 
                              0xFF);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              byte h2 = (byte) ((N &gt;&gt; 48) &amp; 
                              0xFF);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              byte h1 = (byte) (N &gt;&gt; 
                              56);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              newbyte[l++] = 
                              h1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              newbyte[l++] = 
                              h2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              newbyte[l++] = 
                              h3;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              newbyte[l++] = 
                              h4;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              newbyte[l++] = 
                              h5;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              newbyte[l++] = 
                              h6;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              newbyte[l++] = 
                              h7;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              newbyte[l++] = h8;</P>
                              <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              return newbyte;<BR>&nbsp;&nbsp;&nbsp; }</P>
                              <P>&nbsp;&nbsp;&nbsp; private int f1(int x, int y, 
                              int z) 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              return (x &amp; y) | (~x &amp; 
                              z);<BR>&nbsp;&nbsp;&nbsp; }</P>
                              <P>&nbsp;&nbsp;&nbsp; private int f2(int x, int y, 
                              int z) 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              return x ^ y ^ z;<BR>&nbsp;&nbsp;&nbsp; }</P>
                              <P>&nbsp;&nbsp;&nbsp; private int f3(int x, int y, 
                              int z) 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              return (x &amp; y) | (x &amp; z) | (y &amp; 
                              z);<BR>&nbsp;&nbsp;&nbsp; }</P>
                              <P>&nbsp;&nbsp;&nbsp; private int f4(int x, int y) 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              return (x &lt;&lt; y) | x &gt;&gt;&gt; (32 - 
                              y);<BR>&nbsp;&nbsp;&nbsp; }</P>
                              <P>&nbsp;&nbsp;&nbsp; // 
                              单元摘要计算函数<BR>&nbsp;&nbsp;&nbsp; private void 
                              encrypt() 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              for (int i = 16; i &lt;= 79; i++) 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              tmpData[i] = f4(tmpData[i - 3] ^ tmpData[i - 8] ^ 
                              tmpData[i - 14] 
                              ^<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              tmpData[i - 16], 
                              1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              }</P>
                              <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              int[] tmpabcde = new int[5];</P>
                              <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for 
                              (int i1 = 0; i1 &lt; tmpabcde.length; i1++) 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              tmpabcde[i1] = 
                              digestInt[i1];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              }</P>
                              <P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for 
                              (int j = 0; j &lt;= 19; j++) 
                              {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              int tmp = f4(tmpabcde[0], 5) 
                              +<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              f1(tmpabcde[1], tmpabcde[2], tmpabcde[3]) + 
                              tmpabcde[4] 
                              +<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              tmpData[j] + 
                              0x5a827999;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              tmpabcde[4] = 
                              tmpabcde[3];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              tmpabcde[3] = 
                              tmpabcde[2];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                              tmpabcde[2] = f4(tmpabcde[1], 
                              30);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -