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