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

在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 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

(0)

相关推荐

  • java加密算法分享(rsa解密、对称加密、md5加密)

    复制代码 代码如下: import java.io.UnsupportedEncodingException;import java.security.InvalidKeyException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.security.PrivateKey;import java.security.PublicKey;import jav

  • android md5加密与rsa加解密实现代码

    复制代码 代码如下: import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5 { /* * MD5加密 */ public static String getDigest(String str) { MessageDigest messageDigest = nul

  • 基于私钥加密公钥解密的RSA算法C#实现方法

    本文实例讲述了基于私钥加密公钥解密的RSA算法C#实现方法,是一种应用十分广泛的算法.分享给大家供大家参考之用.具体方法如下: 一.概述 RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一.RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价. RSA的安全性依赖于大数分解.公钥和私钥都是两个大素数( 大于 1

  • 在ASP.Net中实现RSA加密的方法

    在我们实际运用中,加密是保证数据安全的重要手段.以前使用ASP时,对数据加密可以使用MD5和SHA1算法,这两种算法虽然快捷有效,但是无法对通过它们加密的密文进行反运算,即是解密.因此需要解密数据的场合,这两种方法就不太适合了.当然你也可以自己编写适用的加密和解密程序,不过这对编写者的数学水平有很高的要求,一般人是很难做到的. 现在,随着ASP.Net的推出,彻底改变了以前ASP下的编程模式.我们能够利用.Net Framework中的类提供的加密服务来保证数据安全.目前应用较为广泛的加密方法是

  • rsa加密算法使用示例分享

    复制代码 代码如下: 产生私钥和公钥System.Security.Cryptography.RSACryptoServiceProvider myrsa = new RSACryptoServiceProvider();//得到私钥主要保存了RSAParameters中的8各参数privateKey = myrsa.ToXmlString(true); //得到公钥保存了RSAParameters中2个参数publicKey = myrsa.ToXmlString(false); RAS实现加

  • 使用openssl实现rsa非对称加密算法示例

    复制代码 代码如下: <?php/** * 使用openssl实现非对称加密 * @since 2010-07-08 */class Rsa{    /**     * private key     */        private $_privKey; /**         * public key         */        private $_pubKey; /**         * the keys saving path         */        privat

  • python使用rsa加密算法模块模拟新浪微博登录

    PC登录新浪微博时,在客户端用js预先对用户名.密码都进行了加密,而且在POST之前会GET一组参数,这也将作为POST_DATA的一部分.这样,就不能用通常的那种简单方法来模拟POST登录(比如人人网). 通过爬虫获取新浪微博数据,模拟登录是必不可少的. 1.在提交POST请求之前,需要GET获取四个参数(servertime,nonce,pubkey和rsakv),不是之前提到的只是获取简单的servertime,nonce,这里主要是由于js对用户名.密码加密方式改变了. 1.1 由于加密

  • PHP+JS+rsa数据加密传输实现代码

    JS端代码: 复制代码 代码如下: //文件base64.js: var b64map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var b64pad="="; function hex2b64(h) { var i; var c; var ret = ""; for(i = 0; i+3 <= h.length; i+=3) { c = pars

  • c# rsa注册实现加密文字

    复制代码 代码如下: RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); private void btencoding_Click(object sender, EventArgs e){    if (mbox.Text == "")    {        MessageBox.Show("加密文字信息不能为空!");        return;    }    if (publick

  • 关于firefox的ElementTraversal 接口 使用说明

    firstElementChild 访问一元素的这个属性必须将该nodeType 1 元素第一子节点引用返回为 Element 对象.如果该被访问元素属性没有任何子节点,或者如果所有这些子节点都不是元素节点, 那么该属性必须返回 null. lastElementChild 访问一元素的这个属性必须将该nodeType 1 元素最后子节点引用返回为 Element 对象.如果该被访问元素属性没有任何子节点,或者如果所有这些子节点都不是元素节点, 那么该属性必须返回 null. previousE

  • 安全技术—RSA公钥密码体制安全性分析

    引言  RSA密码系统是较早提出的一种公开钥密码系统.1978年,美国麻省理工学院(MIT)的Rivest,Shamir和Adleman在题为<获得数字签名和公开钥密码系统的方法>的论文中提出了基于数论的非对称(公开钥)密码体制,称为RSA密码体制.RSA是建立在"大整数的素因子分解是困难问题"基础上的,是一种分组密码体制.  介绍公钥密码体制(背景)  1.对称密码体制  对称密码体制是一种传统密码体制,也称为私钥密码体制.在对称加密系统中,加密和解密采用相同的密

随机推荐