首页
社区
课程
招聘
[求助]VB大数模逆算法
发表于: 2007-6-6 22:10 5504

[求助]VB大数模逆算法

2007-6-6 22:10
5504
VB 大数的模逆算法

上网找到了一个 VB 大数的计算方法,其中这个RSA 模逆运算函数,他说这个函数有问题,但自己看了很久都不懂。。。。

求懂RSA的,VB高手们 帮帮忙  修改一下 和 注析一下  我在线等着,谢谢

'已知a、b,求x,满足a*x =1 (mod b),相当于求解a*x-b*y=1的最小整数解(此函数有问题)
Public Function BigEuclid(ByVal aString As String, ByVal bString As String) As String

  Dim m As String, e As String, si As String, sj As String, x As String, y As String
  Dim xx As Long, yy As Long

    m = bString
    e = aString
    x = "0"
    y = "1"
    xx = 1
    yy = 1
    Do While (e > "0")
        Call TextToBigNumber(m, AAAA, LengthAAAA)
        Call TextToBigNumber(e, BBBB, LengthBBBB)
        Call DivBInt(AAAA, LengthAAAA, BBBB, LengthBBBB, CCCC, LengthCCCC, DDDD, LengthDDDD)
        si = BigNumberToText(CCCC, LengthCCCC)
        sj = BigNumberToText(DDDD, LengthDDDD)
        m = e
        e = sj
        sj = y
        y = BigMul(y, si)
        If (xx = yy) Then
            If ((x > y) And (Len(x) = Len(y)) Or (Len(x) > Len(y))) Then
                y = BigSub(x, y)
              Else 'NOT (X...'NOT ((X...
                y = BigSub(y, x)
                yy = 0
            End If
          Else 'NOT (XX...
            y = BigAdd(y, x)
            xx = 1 - xx
            yy = 1 - yy
        End If
        x = sj
    Loop
    If (xx = 0) Then
        x = BigSub(bString, x)
    End If
    BigEuclid = x

End Function

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好心的高手们,路人们  帮帮忙......
2007-6-8 11:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
急急急...........  帮帮忙

chris_thanks@hotmail.com
2007-6-11 13:41
0
雪    币: 401
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
Call TextToBigNumber(m, AAAA, LengthAAAA)
        Call TextToBigNumber(e, BBBB, LengthBBBB)
        Call DivBInt(AAAA, LengthAAAA, BBBB, LengthBBBB, CCCC, LengthCCCC, DDDD, LengthDDDD)

我虽然不懂RSA,但这些子程序都没有当然不能成功啦!
2007-6-12 11:10
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
Private Sub TextToBigNumber(Tekst As String, A() As Long, LengthA As Long)

  Dim i As Long
  Dim Prvi As String
  Dim MaxLengthPrvi As Long
  Dim Ostatak As Long

    Prvi = Trim$(Tekst)
    If IsBigNum(Prvi) Then
        A(0) = 0
        If Left$(Prvi, 1) = "+" Then
            Prvi = Right$(Prvi, Len(Prvi) - 1)
        End If
        If Left$(Prvi, 1) = "-" Then
            Prvi = Right$(Prvi, Len(Prvi) - 1)
            A(0) = -1
        End If

        MaxLengthPrvi = Len(Prvi)
        If (MaxLengthPrvi \ 4) * 4 = MaxLengthPrvi Then
            LengthA = MaxLengthPrvi \ 4
            For i = 1 To LengthA
                A(i) = Mid$(Prvi, MaxLengthPrvi - i * 4 + 1, 4)
            Next i
          Else 'NOT (MaxLengthPRVI...
            LengthA = MaxLengthPrvi \ 4 + 1
            Ostatak = MaxLengthPrvi Mod 4
            For i = 1 To LengthA - 1
                A(i) = Mid$(Prvi, MaxLengthPrvi - i * 4 + 1, 4)
            Next i
            A(LengthA) = Mid$(Prvi, 1, Ostatak)
        End If
      Else 'IsBigNum(PRVI) = FALSE
        A(1) = 0
        LengthA = 1
    End If

End Sub

其他都有了  就是一个整除的方法 ,过程上面有错吗??
2007-6-18 18:03
0
游客
登录 | 注册 方可回帖
返回
//