HMAC算法--asp源码
作者:cjj 来源:经典论坛 发布时间:2009-08-28 12:51:00
hmac主要应用在身份验证中,它的使用方法是这样的:
1. 客户端发出登录请求(假设是浏览器的GET请求)
2. 服务器返回一个随机值,并在会话中记录这个随机值
3. 客户端将该随机值作为密钥,用户密码进行hmac运算,然后提交给服务器
4. 服务器读取用户数据库中的用户密码和步骤2中发送的随机值做与客户端一样的hmac运算,然后与用户发送的结果比较,如果结果一致则验证用户合法
在这个过程中,可能遭到安全攻击的是服务器发送的随机值和用户发送的hmac结果,而对于截获了这两个值的黑客而言这两个值是没有意义的,绝无获取用户密码的可能性,随机值的引入使hmac只在当前会话中有效,大大增强了安全性和实用性。大多数的语言都实现了hmac算法,比如php的mhash、python的hmac.py、java的MessageDigest类,在web验证中使用hmac也是可行的,用js进行md5运算的速度也是比较快的。
HMAC算法asp源码
THMAC.asp
<%
'/**
'* RFC 2104 HMAC implementation for asp
'*
'* @Author : [BI]CJJ http://www.imcjj.com
'* @Version : 0.1.0 build 20070708
'*/
Class THMAC
' Private Sub Class_Initialize() End Sub
private function SHL(lValue, iShiftBits)
if iShiftBits = 0 then
SHL = lValue
Exit Function
elseif iShiftBits = 31 then
if lValue And 1 then
SHL = &H80000000
else
SHL = 0
end if
Exit Function
elseif iShiftBits < 0 Or iShiftBits > 31 then
Err.Raise 6
end if
if (lValue And 2^(31 - iShiftBits)) then
SHL = ((lValue And (2^(31 - iShiftBits)-1)) * (2^iShiftBits)) Or &H80000000
else
SHL = (lValue And (2^(32 - iShiftBits)-1)) * 2^iShiftBits
end if
end function
private function SHR(lValue, iShiftBits)
if iShiftBits = 0 then
SHR = lValue
Exit Function
elseif iShiftBits = 31 then
if lValue And &H80000000 then
SHR = 1
else
SHR = 0
end if
Exit Function
elseif iShiftBits < 0 Or iShiftBits > 31 then
Err.Raise 6
end if
SHR = (lValue And &H7FFFFFFE) \ (2^iShiftBits)
if (lValue And &H80000000) then
iShiftBits=iShiftBits-1
SHR = SHR Or (&H40000000 \ (2^iShiftBits ))
end if
end function
Private Function bytarray2binl (barray)
Dim nblk,blks(),i
nblk = SHR(ubound(barray) + 9, 6) + 1
ReDim blks((nblk * 16)-1)
For i = 0 To UBound(blks)
blks(i) = 0
Next
For i = 0 To UBound(barray)
blks(SHR(i,2)) = blks(SHR(i,2)) OR (SHL(barray(i) AND &HFF, ((i mod 4)*8)))
Next
blks(SHR(i,2)) = blks(SHR(i,2)) OR (SHL(&H80, ((i mod 4)*8)))
blks(nblk*16-2) = (ubound(barray)+1) * 8
bytarray2binl = blks
end function
Private Function binl2byt(binarray)
Dim hex_tab,bytarray(),i
ReDim bytarray(((UBound(binarray)+1)*4)-1)
For i = 0 To ((UBound(binarray) +1) * 4) -1
bytarray(i) = SHL((SHR(binarray(SHR(i,2)),(((i mod 4)*8)+4)) AND &H0f) ,4) OR (SHR(binarray(SHR(i,2)),((i mod 4)*8)) AND &H0f)
Next
binl2byt = bytarray
end function
private Function binl2hex(binarray)
Dim str,i
For i = 0 to ((UBound(binarray) +1) * 4) -1
str = str & LCase(hex(SHR(binarray(SHR(i,2)),((i mod 4)*8) + 4) AND &Hf)) & lcase(hex(SHR(binarray(SHR(i, 2)), ((i mod 4) * 8)) AND &Hf))
Next
binl2hex = str
end function
Public Function Encrypt(ByRef a_oObj, key, text)
Dim ipad(63),opad(63),idata(),odata(79)
ReDim idata(63 + len(text))
Dim i, innerhashout, hkey
Dim sName
Encrypt=null
sName=TypeName(a_oObj)
If sName<>"TMD5" And sName<>"TSHA1" AND sName<>"TSHA256" Then Exit Function End If
hkey = key
if Len(key) > 64 then hkey = a_oObj.Encrypt(key) end if
For i = 0 to 63
ipad(i) = &H36
idata(i) = &H36
odata(i) = &H5C
opad(i) = &H5C
Next
For i = 0 To len(hkey)-1
ipad(i) = ipad(i) XOR asc(mid(hkey,i+1,1))
opad(i) = opad(i) XOR asc(mid(hkey,i+1,1))
idata(i) = ipad(i) AND &HFF
odata(i) = opad(i) AND &HFF
Next
For i = 0 To Len(text) -1
idata(64 + i) = asc(mid(text,i+1,1)) AND &HFF
Next
innerhashout = binl2byt(a_oObj.EncryptArray(bytarray2binl(idata)))
For i = 0 To 15
odata(64+i) = innerhashout(i)
Next
Encrypt = binl2hex(a_oObj.EncryptArray(bytarray2binl(odata)))
end function
End Class
%>
猜你喜欢
- 平面设计 常用尺寸 三折页广告 标准尺寸: (A4)210mm x 285mm普通宣传册 标准尺寸: (A4)210mm x 285mm文件
- 从技术上来说,在ASP环境中,读入并管理XML文本的主要方法有三种: 创建MSXML对象,并且将XML文档载入DOM; 使用服务器端嵌入(S
- 基于web的技术中,分页是一个老的不能再老的,但大家津津乐道的问题,随着xml技术的日渐应用,把xml应用到分页当中,也是一种可能,当然网上
- 一些大型站点都有着非常一流的视觉外观,它们很可能在设计时使用了网格系统。网格可以是页面布局显得紧凑而且稳定,为设计师在设计站点时提供一个逻辑
- Web Standards Solutions The Markup and Style Handbook - Chapter 1 清单首发
- 什么是Canvas<canvas> 是一个新的 HTML 元素,这个元素在 HTML5&
- 网页设计是由很多个不同的元素构成的,而这些元素的重要性都不同,并且有些元素还需要尤为的突出.有些元素彼此之间存在着联系,而另外的元素之间则一
- “用户体验(User Experience,简称UX 或 UE)是一种纯主观的在用户使用一个产品(服务)的过程中建立起来的心理感受。因为它是
- photoshop快捷键大全: 工具箱(多种工具共用一个快捷键的可同时按【Shift】加此快捷键选取)相关文章:网页设计软件FrontPag
- 网站可用性是任何网站的基本要素,而可用的导航更是网站所必需的要素之一。导航决定了用户如何与网站进行交互。如果没有了可用的导航,那么网站内容就
- 这里所说的“小偷”指的是在ASP中运用XML中的xmlhttp组件提供的强大功能,把远程网站上的数据(图片,网页及其他文件)抓取采集到本地,
- asp如何获知页面上的图象的实际尺寸大小?见下面的两个asp文件:<!--#include virtual="/i
- 没有使用动态语句直接报错 错误的 代码如下:alter proc testpapers as begin declare @tems nva
- 由于XML本身的诸多优点,XML技术已被广泛的使用,目前的好多软件技术同XML紧密相关,比如微软的.net 平台对xml提供了强大的支持,提
- 实现了宽度、高度、透明度的渐变,还能以高度宽度中点为中心,还扩展成以任意点为中心渐变(实例中以点击点为中心)。<!DOCTYPE ht
- <!--#include file="strcheck.asp"--> <% '笔者在写程序的
- 地图现在太常见了,几乎每天在地铁上都能看到卖地图的小贩,”09年新版北京旅游交通图,1块钱一份”,买的人多半是外地来旅游的,这些人需要地图来
- 2007年1月,国务院 * 了中央“一号文件”,文件中对加快农业信息化建设有了更明确的部署,为新农村建
- 先声明一下,这是本人在某个项目中用到的,本人自己写的,如有雷同纯属巧合。同时也欢迎高人指正。这种星级的投票效果很常见,但是目前线上大多都是通
- 在 Internet 连接无处不在的今天,我们忽然有了另外一个需求,离线 Web。Gmail, Google Reader, Zoho 这些