欢迎光临
我们一直在努力

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

建站超值云服务器,限时71元/月

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

本文章有两文件组成
test.asp 测试演示文件
clsrsa.asp 实现rsa加密与解密的vbs类文件
下面是代码:

1. test.asp

<%
rem 文章标题:在asp中通过vbs类实现rsa加密与解密
rem 收集整理:yanek
rem 联系:aspboy@263.net

%>
<%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 联系: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 cant 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

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 在asp中通过vbs类实现rsa加密与解密,建议入精华
分享到: 更多 (0)