在asp中通过vbs类实现rsa加密与解密的代码

在asp中通过vbs类实现rsa加密与解密,建议入精华

本文章有两文件组成

test.asp 测试演示文件

clsrsa.asp 实现rsa加密与解密的vbs类文件

下面是代码:

1. test.asp 

复制代码 代码如下:

<%  rem 文章标题:在asp中通过vbs类实现rsa加密与解密  rem 收集整理:yanek  rem 联系:[email protected]  %>  <%Option Explicit%>  <!--#INCLUDE FILE="clsRSA.asp"-->  <%  Dim LngKeyE  Dim LngKeyD  Dim LngKeyN  Dim StrMessage  Dim ObjRSA  If Not Request.Form = "" Then      LngKeyE = Request.Form("KeyE")      LngKeyD = Request.Form("KeyD")      LngKeyN = Request.Form("KeyN")      StrMessage = Request.Form("Message")      Set ObjRSA = New clsRSA      Select Case Request.Form("Action")          Case "Generate Keys"              Call ObjRSA.GenKey()              LngKeyE = ObjRSA.PublicKey              LngKeyD = ObjRSA.PrivateKey              LngKeyN = ObjRSA.Modulus          Case "Encrypt"              ObjRSA.PublicKey = LngKeyE              ObjRSA.Modulus = LngKeyN              StrMessage = ObjRSA.Encode(StrMessage)          Case "Decrypt"              ObjRSA.PrivateKey = LngKeyD              ObjRSA.Modulus = LngKeyN              StrMessage = ObjRSA.Decode(StrMessage)      End Select      Set ObjRSA = Nothing  End If  %>  <HTML>      <HEAD>          <TITLE>RSA Cipher Demonstration</TITLE>      </HEAD>      <BODY>          <H1>RSA Cipher Demonstration</H1>          <P>              You will first need to generate your public/privage key-pair              before you can encrypt/decrypt messages.          </P>          <FORM method="post">              <TABLE>                  <TR>                      <TD>Public Key</TD>                      <TD><INPUT name="KeyE" value="<%=Server.HTMLEncode(LngKeyE)%>"></TD>                      <TD rowspan="3">                          <INPUT type="Submit" name="Action" value="Generate Keys">                      </TD>                  </TR>                  <TR>                      <TD>Private Key</TD>                      <TD><INPUT name="KeyD" value="<%=Server.HTMLEncode(LngKeyD)%>"></TD>                  </TR>                  <TR>                      <TD>Modulus</TD>                      <TD><INPUT name="KeyN" value="<%=Server.HTMLEncode(LngKeyN)%>"></TD>                  </TR>                  <TR>                      <TD colspan="3">                          Test Message:<BR>                          <TEXTAREA name="Message" cols="50" rows="7"><%=Server.HTMLEncode(StrMessage)%></TEXTAREA>                      </TD>                  </TR>                  <TR>                      <TD align="right" colspan="3">                          <INPUT type="Submit" name="Action" value="Encrypt">                          <INPUT type="Submit" name="Action" value="Decrypt">                      </TD>                  </TR>              </TABLE>          </FORM>              </BODY>  </HTML> 

clsrsa.asp  

复制代码 代码如下:

<%  rem 实现rsa加密与解密的vbs类文件  rem 文章标题:在asp中通过vbs类实现rsa加密与解密  rem 收集整理:yanek  rem 联系:[email protected]  ' RSA Encryption Class  '  ' .PrivateKey  '        Your personal private key.  Keep this hidden.  '  ' .PublicKey  '        Key for others to encrypt data with.  '  ' .Modulus  '        Used with both public and private keys when encrypting  '        and decrypting data.  '  ' .GenKey()  '        Creates Public/Private key set and Modulus  '  ' .Crypt(pLngMessage, pLngKey)    '        Encrypts/Decrypts message and returns   '        as a string.  '  ' .Encode(pStrMessage)  '        Encrypts message and returns in double-hex format  '  ' .Decode(pStrMessage)  '        Decrypts message from double-hex format and returns a string  '  Class clsRSA      Public PrivateKey      Public PublicKey      Public Modulus      Public Sub GenKey()          Dim lLngPhi          Dim q          Dim p          Randomize          Do              Do                  ' 2 random primary numbers (0 to 1000)                  Do                      p = Rnd * 1000 \ 1                  Loop While Not IsPrime(p)                  Do                      q = Rnd * 1000 \ 1                  Loop While Not IsPrime(q)                                    ' n = product of 2 primes                  Modulus = p * q \ 1                  ' random decryptor (2 to n)                  PrivateKey = Rnd * (Modulus - 2) \ 1 + 2                  lLngPhi = (p - 1) * (q - 1) \ 1                  PublicKey = Euler(lLngPhi, PrivateKey)              Loop While PublicKey = 0 Or PublicKey = 1          ' Loop if we can't crypt/decrypt a byte              Loop While Not TestCrypt(255)      End Sub      Private Function TestCrypt(ByRef pBytData)          Dim lStrCrypted          lStrCrypted = Crypt(pBytData, PublicKey)          TestCrypt = Crypt(lStrCrypted, PrivateKey) = pBytData      End Function      Private Function Euler(ByRef pLngPHI, ByRef pLngKey)          Dim lLngR(3)          Dim lLngP(3)          Dim lLngQ(3)          Dim lLngCounter          Dim lLngResult          Euler = 0          lLngR(1) = pLngPHI: lLngR(0) = pLngKey          lLngP(1) = 0: lLngP(0) = 1          lLngQ(1) = 2: lLngQ(0) = 0          lLngCounter = -1          Do Until lLngR(0) = 0              lLngR(2) = lLngR(1): lLngR(1) = lLngR(0)              lLngP(2) = lLngP(1): lLngP(1) = lLngP(0)              lLngQ(2) = lLngQ(1): lLngQ(1) = lLngQ(0)              lLngCounter = lLngCounter + 1              lLngR(0) = lLngR(2) Mod lLngR(1)              lLngP(0) = ((lLngR(2)\lLngR(1)) * lLngP(1)) + lLngP(2)              lLngQ(0) = ((lLngR(2)\lLngR(1)) * lLngQ(1)) + lLngQ(2)          Loop          lLngResult = (pLngKey * lLngP(1)) - (pLngPHI * lLngQ(1))          If lLngResult > 0 Then              Euler = lLngP(1)          Else              Euler = Abs(lLngP(1)) + pLngPHI          End If      End Function      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      Private Function IsPrime(ByRef pLngNumber)          Dim lLngSquare          Dim lLngIndex          IsPrime = False          If pLngNumber < 2 Then Exit Function          If pLngNumber Mod 2 = 0 Then Exit Function          lLngSquare = Sqr(pLngNumber)          For lLngIndex = 3 To lLngSquare Step 2              If pLngNumber Mod lLngIndex = 0 Then Exit Function          Next          IsPrime = True      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  %> 

演示地址:http://www.cnaspol.com/myrsa/test.asp

相关推荐