📄 encodervb.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 + -