<HTML>
<HEAD>
<TITLE>My SHA-1 Example</TITLE>
<SCRIPT language="JavaScript">
// accumulate values to put into text area
var accumulated_output_info;
// add a labeled value to the text area
function accumulate_output( str )
{
accumulated_output_info = accumulated_output_info + str + "\n";
}
// convert a 32-bit value to a 8-char hex string
function cvt_hex( val )
{
var str="";
var i;
var v;
for( i=7; i>=0; i-- )
{
v = (val>>>(i*4))&0x0f;
str += v.toString(16);
}
return str;
}
// add a bit string to the output, inserting spaces as designated
function accumulate_val( label, val )
{
accumulated_output_info += label + cvt_hex(val) + "\n";
}
// return a hex value LSB first
function lsb_hex( val )
{
var str="";
var i;
var vh;
var vl;
for( i=0; i<=6; i+=2 )
{
vh = (val>>>(i*4+4))&0x0f;
vl = (val>>>(i*4))&0x0f;
str += vh.toString(16) + vl.toString(16);
}
return str;
}
// rotate left circular
function rotate_left( n, s )
{
var t4 = ( n<<s ) | (n>>>(32-s));
// accumulate_output( " "+cvt_hex(n)+"<<<"+s+"="+cvt_hex(t4) );
return t4;
}
// calculate the hash
function do_sha1()
{
var blockstart; // which block of words from the dataare we using now?
var i, j;
var W = new Array(80);
// initial constants
var H0 = 0x67452301;
var H1 = 0xEFCDAB89;
var H2 = 0x98BADCFE;
var H3 = 0x10325476;
var H4 = 0xC3D2E1F0;
// working variables
var A, B, C, D, E;
var temp;
// initialize detail output string
accumulated_output_info="";
// get message to hash
var msg = document.stuff.inmsg.value;
// note current length
var msg_len = msg.length;
// convert to a 32-bit word array
var word_array = new Array();
for( i=0; i<msg_len-3; i+=4 )
{
// convert 4 bytes to a word
j = msg.charCodeAt(i)<<24 | msg.charCodeAt(i+1)<<16 |
msg.charCodeAt(i+2)<<8 | msg.charCodeAt(i+3);
word_array.push( j );
accumulate_val( msg.substr(i, 4)+": ", j );
}
// handle final bits, add beginning of padding: 1 bit, then 0 bits
switch( msg_len % 4 )
{
case 0:
// text length was a multiple of 4 bytes, start padding
i = 0x080000000; // 4 bytes padding
break;
case 1:
// one byte of text left
i = msg.charCodeAt(msg_len-1)<<24 | 0x0800000; // 3 bytes padding
break;
case 2:
// two bytes of text left
i = msg.charCodeAt(msg_len-2)<<24 | msg.charCodeAt(msg_len-1)<<16
| 0x08000; // 2 bytes padding
break;
case 3:
// three bytes of text left
i = msg.charCodeAt(msg_len-3)<<24 | msg.charCodeAt(msg_len-2)<<16
| msg.charCodeAt(msg_len-1)<<8 | 0x80; // 1 byte padding
break;
default:
window.alert("Something went weird in the switch!")
return;
}
accumulate_output( "length="+msg_len );
accumulate_val( "length%4="+(msg_len%4)+", padding=", i );
// handle the end of the text and beginning of the padding
word_array.push( i );
// pad to 448 bits (mod 512 bits) = 14 words (mod 16 words)
while( (word_array.length % 16) != 14 )
word_array.push( 0 );
// add 64-bit message length (in bits)
word_array.push( msg_len>>>29 );
word_array.push( (msg_len<<3)&0x0ffffffff );
for( i=0; i<word_array.length; i++ )
accumulate_output( "msg[" + i + "]=" + cvt_hex( word_array[i] ) );
// Process each 16-word block.
for ( blockstart=0; blockstart<word_array.length; blockstart+=16 )
{
accumulate_output( "Starting block at word "+blockstart );
// create entries in W array
for( i=0; i<16; i++ )
W[i] = word_array[blockstart+i];
for( i=16; i<=79; i++ )
W[i] = rotate_left(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1);
for( i=0; i<=79; i++ )
accumulate_output( "W[" + i + "]=" + cvt_hex( W[i] ) );
// copy state
A = H0;
B = H1;
C = H2;
D = H3;
E = H4;
// note start of round values
accumulate_output("A=" + cvt_hex(A) + " B=" + cvt_hex(B) + " C=" + cvt_hex(C)
+ " D=" + cvt_hex(D) + " E=" + cvt_hex(E) );
// update state variables
for( i= 0; i<=19; i++ )
{
temp = (rotate_left(A,5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;
// update state
E = D;
D = C;
C = rotate_left(B,30);
B = A;
A = temp;
accumulate_output( "i="+i+" A=" + cvt_hex(A) + " B=" + cvt_hex(B) + " C=" + cvt_hex(C)
+ " D=" + cvt_hex(D) + " E=" + cvt_hex(E) );
}
for( i=20; i<=39; i++ )
{
temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;
// update state
E = D;
D = C;
C = rotate_left(B,30);
B = A;
A = temp;
accumulate_output( "i="+i+" A=" + cvt_hex(A) + " B=" + cvt_hex(B) + " C=" + cvt_hex(C)
+ " D=" + cvt_hex(D) + " E=" + cvt_hex(E) );
}
for( i=40; i<=59; i++ )
{
temp = (rotate_left(A,5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;
// update state
E = D;
D = C;
C = rotate_left(B,30);
B = A;
A = temp;
accumulate_output( "i="+i+" A=" + cvt_hex(A) + " B=" + cvt_hex(B) + " C=" + cvt_hex(C)
+ " D=" + cvt_hex(D) + " E=" + cvt_hex(E) );
}
for( i=60; i<=79; i++ )
{
temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6CA62C1D6) & 0x0ffffffff;
// update state
E = D;
D = C;
C = rotate_left(B,30);
B = A;
A = temp;
accumulate_output( "i="+i+" A=" + cvt_hex(A) + " B=" + cvt_hex(B) + " C=" + cvt_hex(C)
+ " D=" + cvt_hex(D) + " E=" + cvt_hex(E) );
}
H0 = (H0 + A) & 0x0ffffffff;
H1 = (H1 + B) & 0x0ffffffff;
H2 = (H2 + C) & 0x0ffffffff;
H3 = (H3 + D) & 0x0ffffffff;
H4 = (H4 + E) & 0x0ffffffff;
accumulate_output( "H0=" + cvt_hex(H0) + " H1=" + cvt_hex(H1) + " H2=" + cvt_hex(H2)
+ " H3=" + cvt_hex(H3) + " H4=" + cvt_hex(H4) );
} // of loop on i
// process output
document.stuff.outhash.value = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2)
+ cvt_hex(H3) + cvt_hex(H4);
document.stuff.details.value = accumulated_output_info;
}
</SCRIPT>
</HEAD>
<BODY>
<FORM name="stuff">
Enter your message here:<BR>
<TEXTAREA name="inmsg" id="inmsg" rows="20" cols="90"></TEXTAREA>
<P>
<INPUT type="button" value="Calculate Hash" onClick="do_sha1();" />
<HR>
SHA-1 hash:<BR>
<INPUT type="text" name="outhash" size="50" />
<P>
Details:<BR>
<TEXTAREA name="details" id="details" rows="22" cols="90"></TEXTAREA>
</FORM>
<p>
<hr>
Return to the <a href="../index.html">CSC 460</a> home page<br>
Return to my <a href="../../index.html">home page</a><br>
Go to the <a href="http://www.cs.eku.edu">EKU CS Department</a> page
</BODY>
</HTML>
没有合适的资源?快使用搜索试试~ 我知道了~
JS-SHA1.rar_java SHA-1_js_js java sha
共1个文件
htm:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 161 浏览量
2022-09-22
21:17:38
上传
评论
收藏 2KB RAR 举报
温馨提示
通过Java实现sha-1加密算法的加解密
资源推荐
资源详情
资源评论
收起资源包目录
JS-SHA1.rar (1个子文件)
JS-SHA1.htm 7KB
共 1 条
- 1
资源评论
alvarocfc
- 粉丝: 105
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功