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

    技术2022-05-11  61

    在asp中通过vbs类实现rsa加密与解密,建议入精华 本文章有两文件组成 test.asp 测试演示文件 clsrsa.asp 实现rsa加密与解密的vbs类文件 下面是代码: 1. test.asp <%rem 文章标题:在asp中通过vbs类实现rsa加密与解密rem 收集整理:yanekrem 联系:aspboy@263.net%><%Option Explicit%><!--#INCLUDE FILE="clsRSA.asp"--><%Dim LngKeyEDim LngKeyDDim LngKeyNDim StrMessageDim ObjRSAIf 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 收集整理:yanekrem 联系:aspboy@263.net' 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 FunctionEnd Class%>演示地址:http://www.cnaspol.com/myrsa/test.asp

    最新回复(0)