asp中如何使用sha1加密???

fightgod100 2004-07-15 12:47:18
在asp.net中,很容易实现sha1和md5加密,在asp中使用md5加密的也很多,比较常见,那么如何在asp中sha1加密呢?还有,sha1和md5两种加密算法有什么区别和特点???

希望高手指点一下~~谢谢~~
...全文
587 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Drowning 2004-09-10
  • 打赏
  • 举报
回复
Mrak
pfc001 2004-07-17
  • 打赏
  • 举报
回复
不会
cdsun 2004-07-17
  • 打赏
  • 举报
回复
顶一下
fightgod100 2004-07-17
  • 打赏
  • 举报
回复
郁闷:(
fightgod100 2004-07-17
  • 打赏
  • 举报
回复
ok了,原来是少了那个“runat="server"”!!我的第一个sha1.js也是可以的,终于搞定了

谢谢各位兄弟了!!!!
lordwudee 2004-07-17
  • 打赏
  • 举报
回复
哦,是这样的,你如果在asp文件中执行sha1的话就要把sha1放到服务器端。
<script language="javascript" src="sha1.js" runat="server"></script>
fightgod100 2004-07-17
  • 打赏
  • 举报
回复
楼上的,不行啊,运行结果

Microsoft VBScript 编译器错误 错误 '800a03f6'

缺少 'End'

/iisHelp/common/500-100.asp,行242

Microsoft VBScript 运行时错误 错误 '800a000d'

类型不匹配: 'hex_sha1'

/haha/sha1.asp,行12



我的sha1.asp是

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<SCRIPT language=javascript src="sha1.js"></script>
</head>

<body>
<%
dim content,mysha1
content="linyq"
mysha1=hex_sha1(content)
response.Write mysha1
%>
</body>
</html>



????????????????????
lordwudee 2004-07-17
  • 打赏
  • 举报
回复
我这里有个比较权威的sha1.js,在网页中用<script language="javascript" src="sha1.js"></script>链接文件之后,在需要饮用的地方输入:
变量名=hex_sha1(字符串/变量)

sha1.js
====================================
/*
* A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
* in FIPS PUB 180-1
* Version 2.1-BETA Copyright Paul Johnston 2000 - 2002.
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
* Distributed under the BSD License
* See http://pajhome.org.uk/crypt/md5 for details.
*/

/*
* Configurable variables. You may need to tweak these to be compatible with
* the server-side, but the defaults work in most cases.
*/
var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */

/*
* These are the functions you'll usually want to call
* They take string arguments and return either hex or base-64 encoded strings
*/
function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));}
function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));}
function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));}
function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));}
function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));}
function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));}

/*
* Perform a simple self-test to see if the VM is working
*/
function sha1_vm_test()
{
return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
}

/*
* Calculate the SHA-1 of an array of big-endian words, and a bit length
*/
function core_sha1(x, len)
{
/* append padding */
x[len >> 5] |= 0x80 << (24 - len % 32);
x[((len + 64 >> 9) << 4) + 15] = len;

var w = Array(80);
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
var e = -1009589776;

for(var i = 0; i < x.length; i += 16)
{
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;
var olde = e;

for(var j = 0; j < 80; j++)
{
if(j < 16) w[j] = x[i + j];
else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
safe_add(safe_add(e, w[j]), sha1_kt(j)));
e = d;
d = c;
c = rol(b, 30);
b = a;
a = t;
}

a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
e = safe_add(e, olde);
}
return Array(a, b, c, d, e);

}

/*
* Perform the appropriate triplet combination function for the current
* iteration
*/
function sha1_ft(t, b, c, d)
{
if(t < 20) return (b & c) | ((~b) & d);
if(t < 40) return b ^ c ^ d;
if(t < 60) return (b & c) | (b & d) | (c & d);
return b ^ c ^ d;
}

/*
* Determine the appropriate additive constant for the current iteration
*/
function sha1_kt(t)
{
return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
(t < 60) ? -1894007588 : -899497514;
}

/*
* Calculate the HMAC-SHA1 of a key and some data
*/
function core_hmac_sha1(key, data)
{
var bkey = str2binb(key);
if(bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz);

var ipad = Array(16), opad = Array(16);
for(var i = 0; i < 16; i++)
{
ipad[i] = bkey[i] ^ 0x36363636;
opad[i] = bkey[i] ^ 0x5C5C5C5C;
}

var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);
return core_sha1(opad.concat(hash), 512 + 160);
}

/*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
*/
function safe_add(x, y)
{
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}

/*
* Bitwise rotate a 32-bit number to the left.
*/
function rol(num, cnt)
{
return (num << cnt) | (num >>> (32 - cnt));
}

/*
* Convert an 8-bit or 16-bit string to an array of big-endian words
* In 8-bit function, characters >255 have their hi-byte silently ignored.
*/
function str2binb(str)
{
var bin = Array();
var mask = (1 << chrsz) - 1;
for(var i = 0; i < str.length * chrsz; i += chrsz)
bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i%32);
return bin;
}

/*
* Convert an array of big-endian words to a string
*/
function binb2str(bin)
{
var str = "";
var mask = (1 << chrsz) - 1;
for(var i = 0; i < bin.length * 32; i += chrsz)
str += String.fromCharCode((bin[i>>5] >>> (24 - i%32)) & mask);
return str;
}

/*
* Convert an array of big-endian words to a hex string.
*/
function binb2hex(binarray)
{
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
var str = "";
for(var i = 0; i < binarray.length * 4; i++)
{
str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF);
}
return str;
}

/*
* Convert an array of big-endian words to a base-64 string
*/
function binb2b64(binarray)
{
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var str = "";
for(var i = 0; i < binarray.length * 4; i += 3)
{
var triplet = (((binarray[i >> 2] >> 8 * (3 - i %4)) & 0xFF) << 16)
| (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 )
| ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);
for(var j = 0; j < 4; j++)
{
if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
}
}
return str;
}
maxwelling 2004-07-17
  • 打赏
  • 举报
回复
up,,,,,偶也一直在找加密算法及其运用。不过我是倾向于双向的加密算法。
fightgod100 2004-07-17
  • 打赏
  • 举报
回复
晕~~都顶了这么多次,怎么还没有高手来看看呢?????
zhuchengyi520 2004-07-17
  • 打赏
  • 举报
回复
up
fightgod100 2004-07-17
  • 打赏
  • 举报
回复
顶!!!!!!!!!!!!!!!!!
fightgod100 2004-07-16
  • 打赏
  • 举报
回复
看到e文我就头晕~~,现在一些支持md5加密的论坛里面都有一个md5.asp这个文件,请问谁知道有类似这种文件的sha1文件????
fightgod100 2004-07-16
  • 打赏
  • 举报
回复
掉下去了,顶一下~~
fightgod100 2004-07-16
  • 打赏
  • 举报
回复
好象不行的哦~~我试了一下,
sha1.js代码为:(楼上给的代码)
var sHEXChars="0123456789abcdef";
function hex(num)
{
var str="";
for(var j=7;j>=0;j--)
str+=sHEXChars.charAt((num>>(j*4))&0x0F);
return str;
}
function AlignSHA1(sIn){
var nblk=((sIn.length+8)>>6)+1, blks=new Array(nblk*16);
for(var i=0;i<nblk*16;i++)blks[i]=0;
for(i=0;i<sIn.length;i++)
blks[i>>2]|=sIn.charCodeAt(i)<<(24-(i&3)*8);
blks[i>>2]|=0x80<<(24-(i&3)*8);
blks[nblk*16-1]=sIn.length*8;
return blks;
}
function add(x,y){
var lsw=(x&0xFFFF)+(y&0xFFFF);
var msw=(x>>16)+(y>>16)+(lsw>>16);
return(msw<<16)|(lsw&0xFFFF);
}
function rol(num,cnt){
return(num<<cnt)|(num>>>(32-cnt));
}
function ft(t,b,c,d){
if(t<20)return(b&c)|((~b)&d);
if(t<40)return b^c^d;
if(t<60)return(b&c)|(b&d)|(c&d);
return b^c^d;
}

function kt(t) {
return(t<20)?1518500249:(t<40)?1859775393:
(t<60)?-1894007588:-899497514;
}

function SHA1(sIn)
{
var x=AlignSHA1(sIn);
var w=new Array(80);
var a=1732584193;
var b=-271733879;
var c=-1732584194;
var d=271733878;
var e=-1009589776;
for(var i=0;i<x.length;i+=16){
var olda=a;
var oldb=b;
var oldc=c;
var oldd=d;
var olde=e;
for(var j=0;j<80;j++){
if(j<16)w[j]=x[i+j];
else w[j]=rol(w[j-3]^w[j-8]^w[j-14]^w[j-16],1);
t=add(add(rol(a,5),ft(j,b,c,d)),add(add(e,w[j]),kt(j)));
e=d;
d=c;
c=rol(b,30);
b=a;
a=t;
}
a=add(a,olda);
b=add(b,oldb);
c=add(c,oldc);
d=add(d,oldd);
e=add(e,olde);
}
return hex(a)+hex(b)+hex(c)+hex(d)+hex(e);
}



sha1.asp代码为:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<SCRIPT language=javascript src="sha1.js"></script>
</head>

<body>
<%
dim sIn,mysha1
sIn="linyq"
mysha1=SHA1(sIn)
response.Write mysha1
%>
</body>
</html>




运行结果:

Microsoft VBScript 编译器错误 错误 '800a03f6'

缺少 'End'

/iisHelp/common/500-100.asp,行242

Microsoft VBScript 运行时错误 错误 '800a000d'

类型不匹配: 'SHA1'

/haha/sha1.asp,行12




请教高手哪里出错了????谢谢!!!
rightyeah 2004-07-16
  • 打赏
  • 举报
回复
这是sha1算法的jscript实现
http://www.frontfree.net/view/article_613.html
fw325 2004-07-16
  • 打赏
  • 举报
回复
对,
支持楼上的,
fightgod100 2004-07-16
  • 打赏
  • 举报
回复
自己再顶一下~~~会的高手都帮帮忙啊
ShiningstarHu 2004-07-15
  • 打赏
  • 举报
回复
md5是比较老的 Hash 加密算法。 已经有破解的方法。
sha1比较新。 使用160 bit字长。 两者都是Hash算法。是不可逆的加密算法。

ASP中你可以找支持Sha1加密算法的组建来实现。或者你可以自己写代码。
Sha1的算法是公开的。

下面给出大概的算法步骤:

SHA-1 works on 512 bits of the input at a time and produces a 160 bit hash. Each operation takes place using 32 bit words

Step1 Add padding bits and length
The input to SHA-1 is the message plus 64 bits that record the length of the message plus padding bits inserted between the message end and the 64 bits of length such that the total length will divide by 512 with no remainder. The padding bits are 1 followed by the required number of zeroes.


Message bits + 1 to 512 padding bits + 64 bit Msg Lngth

Step2 Initialising the 160 bit hash buffer
Each block of 512 bits updates the state of the 160 bit hash via a process involving 80 steps.
The state of the 160 bit hash buffer as left by the processing of the last 512 bit block is used in each of the 80 steps that process the next 512 bit block.
In order to process the first 512 bit block the 160 bit hash buffer has to be initialised. The 160 bit are viewed as 5 words and given values of
A= hex 67452301
B= hex EFCDAB89
C= hex 98BADCFE
D = hex 10325476
E = hex C3D2E1F0 (high order octets first)


Step3 the 80 rounds for each block
The algorithm works by creating new values for A,B,C,D,and E in each of the 80 rounds.
The new values for B,C,D,E in each round are not influenced by the values in the 512 bit block but the value for A is.
the value of A is copied to B
the value of B is circular left shifted 30 bits and placed in C
the value of C is copied to D
the value of D is copied to E
A is calculated as a result of 4 modulo 232 additions thus:
E plus a function on (the existing values of B, C and D ) plus (the existing value of A circular left shifted 5 bits) plus (a word from the 512 bit input block) plus (a constant (k)).
The function, input word from the data block and the constant vary according to which of the 80 rounds is being processed. The round number is indicated as (t)

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧