⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 decodervb.bas

📁 一个VB小程序,能够进行大数的计算,可以作为学习的参考
💻 BAS
字号:
Attribute VB_Name = "Decoder"
Attribute VB_Description = "Decryption using the Chinese remainder theorem."
'Author : Sjoerd.J.Schaper - vspickelen@zonnet.nl
'URL    : http://largeint.sourceforge.net/index.html
'Date   : 05-05-2004
'Code   : Visual Basic for Windows 5.0
Option Explicit

Sub Decode(DFile As String)
  Dim byt As String * 1, b4 As String * 4
  Dim g As String, i0 As Integer, i1 As Integer
  Dim ik As String, il As String, inf As String
  Dim ip As String, iq As String, lp As Integer
  Dim lq As Integer, N As Integer, ouf As String
  Dim p As Integer, p1 As Integer, pc As Integer
  Dim pp As Integer, q As Integer, q1 As Integer
  Dim r As Integer, rl As Integer, s As Integer
  Dim t As Integer, tim As Double, Keyfil As Integer
  Dim Plfil As Integer, Cifil As Integer
  On Error GoTo errhand
  Data = "": Key = 0: tim = Timer
  N = 1: p = 2: q = 3: p1 = 4: q1 = 5
  lp = 6: lq = 7: i0 = 8: i1 = 9 '     pointers

  inf = "private.key" '                set default filenames
  ouf = "decoded.txt"

  Cifil = FreeFile
  Open WrkD + DFile For Binary As Cifil

  Keyfil = FreeFile
  Open WrkD + inf For Input As Keyfil
    Input #Keyfil, ik, il, ip, iq '    split private key l and primes P & Q
  Close Keyfil
  If Val(iq) < 1 Then Error 62
  il = RTrim$(il) + LTrim$(ik)

  Plfil = FreeFile
  Open WrkD + ouf For Binary As Plfil

  Readst i0, ip: Readst i1, iq
  Copyf i0, p: Copyf i1, q

  Euclid i1, p, q1 '                   Q^ -1 Mod P
  Euclid i0, q, p1 '                   P^ -1 Mod Q
  Swp i1, q1: Swp i0, p1
  Mult p, q, N: Swp p, N '             P * Q = N

  Readst lp, il: Copyf lp, lq '        precompute exponents...
  Dcr p, 1: Moddiv lp, p: Inc p, 1 '   l Mod (P-1)
  Dcr q, 1: Moddiv lq, q: Inc q, 1 '   l Mod (Q-1)

  Get #Cifil, 1, b4 '                  read recordlength
  rl = Cvl(b4)
  pc = LOF(Cifil)
  s = pc \ (rl + 2)

  pc = 4: pp = 0: g = dbCrLf '         initial positions
  For r = 1 To s
    Letf i0, 0
    For t = 1 To rl + 2 '              convert cipher to base MB
      If t > 1 Then Lsft i0, 8
      Get #Cifil, pc + t, byt
      Inc i0, Asc(byt)
    Next t
    pc = pc + rl + 2
    '
    Copyf i0, i1
    Moddiv i0, p: Moddiv i1, q '       reduce cipher Mod P, Mod Q
    Modpwr i0, lp, p '                 c ^ lp Mod P = M_p
    Modpwr i1, lq, q '                 c ^ lq Mod Q = M_q
    '                                  Chinese recombination
    Modmlt i0, q1, N '                 M_p * Q^ -1 Mod N
    Mult i0, q, t1 '                   * Q
    Modmlt i1, p1, N '                 M_q * P^ -1 Mod N
    Mult i1, p, t1 '                   * P
    Add i0, i1: Moddiv i0, N '         sum
    '
    For t = 1 To rl '                  convert message to base 2^ 8
      byt = Chr$(Gete(i0, 0) And 255)
      Put #Plfil, pp + t, byt
      Rsft i0, 8: Data = Data + byt
    Next t
    pp = pp + rl
    '
    Slate.Box.Text = Data
    Slate.Box.SelStart = Len(Slate.Box.Text) + 1
    DoEvents: If Key Then GoTo break
  Next r

eind:
  g = g & "timer: " & CSng(Timer - tim) & "s"
  Slate.Box.Text = Slate.Box.Text + g
  Slate.Box.SelStart = Len(Slate.Box.Text) + 1
  Close: Data = ""
  On Error GoTo 0
  Exit Sub
break:
  g = g + " break" + g
  GoTo eind
errhand:
  MsgBox "Decoder error", 48, "Error"
  Resume eind
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -