在线用户    站点地图 技术论坛 文档中心 站点导航 资源下载 语言参考 教程专题 站点统计 业务项目 使用帮助
您的位置
MSDN参考新加了CSS2参考,全中文,制作精良。245k下载。           新加了sxf_sxf推荐的"动态网页专家指导" 下载!          新加了lsg2002lsg推荐的"ASP.NET高级编程(PDF)" 下载!          新加了DHTML代码预览!!,功能强大哦!欢迎试用          新加了网友lincong为大家提供的SQL Server 2000 程序员指南,有点大,但同时也就说明内容全咯!           新加了网友ibra为大家提供的北大的JAVA课件,很适合初学者入门           新加了一个java的连接缓冲池代码示例           新加了人月神话电子版下载!软件工程巨著哦~~           更新了评分标准,引入了“专家分”概念,相信可以更好的激励大家的学习!详情请看“使用帮助”           新加了由网友GGG提供的“IIS超级管理手册”,值得一看哦!(虽然我没看过 :P )           新加了“英雄榜”,欢迎测试!           “无组件上传·从原理剖析到实践”已经全部完成,源码全部开放,有兴趣的朋友请到文档中心一探究竟。  您的位置  首页>技术论坛>ASP>F0112281 在同一窗口中打开页面中的链接 在新窗口中打开页面中的链接 将ASPCHINA设为首页 将ASPCHINA加入书签    
 LOGIN HERE
用户:
密码: 忘记密码
记住密码 用户注册 游客进入

论坛首页
|--web开发
   |--ASP
   |--JSP
   |--ASP.net
   |--DHTML
   |--RUBY
|--软件开发
   |--C++
      |--Code here
   |--JAVA
   |--VB
   |--Delphi
   |--XML
|--.net技术
   |--C#
   |--VB.net
|--Yup开发组
|--站务&投诉
   |--站长专区
|--硬件&网络
|--休息室
|--数据库技术
 进入精华区 我要发言



 请问:如何解密RSA(<128位)[讨论]back to ASP forum  
作者:pure,7级分数:100
日期:2004/3/18 12:09:00类别:ASP, 技术问题
回复:10次浏览:1587次
状态:已结贴 [miles(20), butterfly(20), 土匪(15), omgod(15), 山里人(15), lightsword_zt(15)]

希望大家一起出出主意,语言不限

reply[F0112281]
 



 
 re [1] 请问:如何解密RSA(<128位)[讨论]ASP forum  
- omgod04-03-18 12:25  

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


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

1. test.asp

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

<%
' 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





reply[F0112295]
 



 
 re [2] 请问:如何解密RSA(<128位)[讨论]ASP forum  
- 山里人04-03-18 13:02  

可以参考
http://www.tx.net.cn/school/asp/wz/37WWQOCYZZQQ1NJCHS.shtml

reply[F0112302]
 



 
 re [3] 请问:如何解密RSA(<128位)[讨论]ASP forum  
- pure04-03-18 14:08  

老大,这是哪跟哪啊!
我要的是RSA encrypt/decrypt啊!!!

reply[F0112325]
 



 
 re [4] 请问:如何解密RSA(<128位)[讨论]ASP forum  
- omgod04-03-18 14:48  

你是不是要VB的源程序???有一个是基于RSA的源程序

reply[F0112338]
 



 
 re [2] 请问:如何解密RSA(<128位)[讨论]ASP forum  
- pure04-03-18 14:09  

如果不知道密码的情况下,如何解密?有没有可能?

reply[F0112326]
 



 
 re [3] 请问:如何解密RSA(<128位)[讨论]ASP forum  
- butterfly04-03-19 09:34  

当然是可以解密的,因为有研究组织在Internet上用1600台协同工作的计算机用了8个月的时间攻破RSA,只是密钥长度不太清楚,但应该是 >128位 的

另外你说的不知道密码,是指公开密钥吧?
解密的算法我想应该会使用穷举法,根据公开的加密算法解密算法,剩下的应该只是数学问题了

reply[F0112465]
 



 
 re [1] 请问:如何解密RSA(<128位)[讨论]ASP forum  
- lightsword_zt04-03-18 14:41  

用DEBUG调试有可能反编译过来.不过得很精通的吧.

reply[F0112336]
 



 
 re [1] 请问:如何解密RSA(<128位)[讨论]ASP forum  
- 土匪04-03-18 14:58  

记得上课的时候老师说过不行.

reply[F0112341]
 



 
 re [2] 请问:如何解密RSA(<128位)[讨论]ASP forum  
- 山里人04-03-18 15:44  

呵呵,
一不小心就漏了机密
学习

reply[F0112348]
 



 
 re [1] 请问:如何解密RSA(<128位)[讨论]ASP forum  
- miles04-03-23 10:05  

A0000710

关键看时间和运算速度了,呵呵。。其实就是暴力破解。

reply[F0113285]
 



您的位置
  (c)2000-2020 Yup Studio, all rights reserved.  
183.5938