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

📄 encodervb.bas

📁 一个VB小程序,能够进行大数的计算,可以作为学习的参考
💻 BAS
字号:
Attribute VB_Name = "Encoder"
Attribute VB_Description = "Cryptography, exponential encryption."
'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 Encode(EFile As String)
  Dim byt As String * 1, g As String, ik As String
  Dim iM As String, inf As String, k As Integer
  Dim m As Integer, N As Integer, Ni As String
  Dim ouf As String, pc As Integer, pp 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
  m = 1: k = 2: N = 3

  inf = "public.key" '                 set default filenames
  ouf = "encoded.bin"

  Plfil = FreeFile
  Open WrkD + EFile For Binary As Plfil

  Keyfil = FreeFile
  Open WrkD + inf$ For Input As Keyfil
     Input #Keyfil, ik, iM, Ni '       public key k & split modulus N
  Close Keyfil
  If Val(Ni) < 1 Then Error 62
  Ni = RTrim$(Ni) + LTrim$(iM)

  Cifil = FreeFile
  Open WrkD + ouf$ For Binary As Cifil
  r = LOF(Cifil): Close Cifil
  If r > 0 Then Kill WrkD + ouf$ '     clear existing ciphertext
  Open WrkD + ouf$ For Binary As Cifil

  Readst k, ik: Readst N, Ni

  Letf t0, 256: rl = 0 '               compute recordlength
  Do Until Cmp(t0, N) = 1
    Lsft t0, 8: rl = rl + 1
  Loop
  If rl = 0 Then GoTo eind
  g = Mkl$(CLng(rl))
  Put #Cifil, 1, g

  pp = LOF(Plfil)
  r = pp Mod rl: s = pp \ rl
  If r > 0 Then
    g = String$(rl - r, Chr$(0))
    Put #Plfil, pp + 1, g: s = s + 1 ' file padding
  End If

  pp = 1: pc = 5: g = dbCrLf '         initial positions
  For r = 1 To s
    Slate.Box.Text = " record " & r
    DoEvents: If Key Then GoTo break
    '
    pp = pp + rl
    Letf m, 0
    For t = 1 To rl '                  convert message to base MB
      If t > 1 Then Lsft m, 8
      Get #Plfil, pp - t, byt
      Inc m, Asc(byt)
    Next t
    '
    Modpwr m, k, N '                   cipher M ^ k Mod N
    '
    pc = pc + rl + 2 '                 surplus
    For t = 1 To rl + 2 '              convert cipher to base 2^ 8
      byt = Chr$(Gete(m, 0) And 255)
      Put #Cifil, pc - t, byt
      Rsft m, 8
    Next t
  Next r

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

⌨️ 快捷键说明

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