基于RSA算法在asp中加密与解密对应的函数

作者:hnsoso 来源:动网 时间:2007-11-07 21:39:00 

在ASP中加密方法有对应的解密方法好象不多,现在根据前辈资料整理出在asp中加密与解密函数,根据RSA 算法实现的。

什么是RSA?

RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。 RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。RSA的缺点主要有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。B)分组长度太大,为保证安全性,n 至少也要 600 bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET(Secure Electronic Transaction)协议中要求CA采用2048比特长的密钥,其他实体使用1024比特的密钥。

更多关于RSA的介绍请看:http://baike.baidu.com/view/7520.htm

rsa.asp


<% 
rem 在ASP中实现加密与解密,加密方法:根据RSA 
rem 联系:hnsoso@sina.com 
Class clsRSA 
  Public PrivateKey 
  Public PublicKey 
  Public Modulus 
   
   
   
  Public Function Crypt(pLngMessage, pLngKey) 
    On Error Resume Next 
    Dim lLngMod 
    Dim lLngResult 
    Dim lLngIndex 
    If pLngKey Mod 2 = 0 Then 
      lLngResult = 1 
      For lLngIndex = 1 To pLngKey / 2 
        lLngMod = (pLngMessage ^ 2) Mod Modulus 
        ' Mod may error on key generation 
        lLngResult = (lLngMod * lLngResult) Mod Modulus 
        If Err Then Exit Function 
      Next 
    Else 
      lLngResult = pLngMessage 
      For lLngIndex = 1 To pLngKey / 2 
        lLngMod = (pLngMessage ^ 2) Mod Modulus 
        On Error Resume Next 
        ' Mod may error on key generation 
        lLngResult = (lLngMod * lLngResult) Mod Modulus 
        If Err Then Exit Function 
      Next 
    End If 
    Crypt = lLngResult 
  End Function 
  Public Function Encode(ByVal pStrMessage) 
    Dim lLngIndex 
    Dim lLngMaxIndex 
    Dim lBytAscii 
    Dim lLngEncrypted 
    lLngMaxIndex = Len(pStrMessage) 
    If lLngMaxIndex = 0 Then Exit Function 
    For lLngIndex = 1 To lLngMaxIndex 
      lBytAscii = Asc(Mid(pStrMessage, lLngIndex, 1)) 
      lLngEncrypted = Crypt(lBytAscii, PublicKey) 
      Encode = Encode & NumberToHex(lLngEncrypted, 4) 
    Next 
  End Function 
   
  Public Function Decode(ByVal pStrMessage) 
    Dim lBytAscii 
    Dim lLngIndex 
    Dim lLngMaxIndex 
    Dim lLngEncryptedData 
    Decode = "" 
    lLngMaxIndex = Len(pStrMessage) 
    For lLngIndex = 1 To lLngMaxIndex Step 4 
      lLngEncryptedData = HexToNumber(Mid(pStrMessage, lLngIndex, 4)) 
      lBytAscii = Crypt(lLngEncryptedData, PrivateKey) 
      Decode = Decode & Chr(lBytAscii) 
    Next 
  End Function 
   
  Private Function NumberToHex(ByRef pLngNumber, ByRef pLngLength) 
    NumberToHex = Right(String(pLngLength, "0") & Hex(pLngNumber), pLngLength) 
  End Function 
  Private Function HexToNumber(ByRef pStrHex) 
    HexToNumber = CLng("&h" & pStrHex) 
  End Function 
End Class 
%> 


测试页面 test.asp


<!--#INCLUDE FILE="RSA.asp"--> 
<% 
function Encryptstr(Message) 
Dim LngKeyE 
Dim LngKeyD 
Dim LngKeyN 
Dim StrMessage 
Dim ObjRSA 
  LngKeyE = "32823" 
  LngKeyD = "20643" 
  LngKeyN = "29893" 
  StrMessage = Message 
   
  Set ObjRSA = New clsRSA 
   
  
      ObjRSA.PublicKey = LngKeyE 
      ObjRSA.Modulus = LngKeyN 
      Encryptstr = ObjRSA.Encode(StrMessage) 
  Set ObjRSA = Nothing 
end function 
function decryptstr(Message) 
Dim LngKeyE 
Dim LngKeyD 
Dim LngKeyN 
Dim StrMessage 
Dim ObjRSA 
  LngKeyE = "32823" 
  LngKeyD = "20643" 
  LngKeyN = "29893" 
  StrMessage = Message 
   
  Set ObjRSA = New clsRSA 
      ObjRSA.PrivateKey =LngKeyD 
      ObjRSA.Modulus=LngKeyN 
      decryptstr=ObjRSA.Decode(StrMessage) 
  Set ObjRSA = Nothing 
end function 
dim last,first 
first="sohu" 
Response.Write "加密前为:"&first 
last=Encryptstr(first) 
Response.Write "加密后为"&last 
Response.Write "解密后为" &decryptstr(last) 
%>


标签:加密,解密,asp
0
投稿

猜你喜欢

  • ASP控制每页打印行数实例

    2008-04-13 06:48:00
  • Asp Oracle存储过程返回结果集的代码

    2011-04-10 11:16:00
  • 好用的JS图片预加载类

    2007-08-13 13:49:00
  • ASP:判断访问是否来自搜索引擎的函数

    2008-03-12 11:39:00
  • CSS3的新特性

    2009-03-23 17:46:00
  • javascript闭包的秘密

    2008-09-28 20:39:00
  • SQL Server中读取XML文件的简单做法

    2008-12-23 15:29:00
  • 有故事的网页设计——Flash网站奇妙之旅

    2011-01-20 19:58:00
  • zen coding的dreamweaver插件安装教程

    2010-01-12 13:30:00
  • (X)HTML的文档结构

    2008-06-30 12:25:00
  • 如何正确合理的建立MYSQL数据库索引

    2010-10-25 20:08:00
  • UCDChina.com 关于用户期望的讨论

    2008-07-10 11:55:00
  • js打开新窗口方法代码收集

    2007-09-05 19:20:00
  • ASP利用Google实现在线翻译功能

    2010-03-07 17:28:00
  • 浅谈ACCESS数据库升迁SQLSERVER注意事项

    2007-08-11 13:44:00
  • 前端也应关注安全

    2009-03-16 17:02:00
  • css利用锚点控制翻页

    2008-07-17 13:12:00
  • 网站LOGO设计规范的思考--1.设计基础

    2007-10-14 10:55:00
  • 启动iis出现发生意外0x8ffe2740的解决方法

    2011-03-31 11:19:00
  • ASP 字符串转数字格式

    2009-08-19 17:18:00
  • asp之家 网络编程 m.aspxhome.com