Olisi pieni ongelma RC4 kryptauksessa.
Ongelma on se, että itse kryptaus toimii, mutta purku toimi vasta toisella purulla.
Eli purkamisen joutuu tekemään kahteen kertaan, jotta tiedoston saa selkokieliseksi.
Olisiko vinkkejä mikä tässä mättää.
Eli koodit menee seuraavasti:
Purku:
Private Sub Command2_Click()
Dim inbyte As Byte
Dim z As Long
Dim IntCheckFile As Integer
Dim Tarkiste As Byte
i = 0: j = 0
Tunnari = "TUNNUS"
RC4ini (Tunnari)
Open App.Path & "\Password1.dat" For Binary As 1
Open App.Path & "\Password.dat" For Binary As 2
For z = 1 To LOF(1)
Get #1, , inbyte
Put #2, , EnDeCryptSingle(inbyte)
Next z
Close 1
Close 2
End SubKryptaus:
Private Sub Command1_Click()
Dim inbyte As Byte
Dim z As Long
Dim Tarkiste
Tunnari = "TUNNUS"
i = 0: j = 0
RC4ini (Tunnari)
Open App.Path & "\Password.dat" For Binary As 1
Open App.Path & "\Password1.dat" For Binary As 2
For z = 1 To LOF(1)
Get #1, , inbyte
Put #2, , EnDeCryptSingle(inbyte)
Next
Close 1
Close 2
End SubJa moduulin tiedot:
Option Explicit
Dim s(0 To 255) As Integer
Dim kep(0 To 255) As Integer
Dim i As Integer, j As Integer
Dim Tunnari As String
'Salasanan tallennus ja kryptaus
Public Sub RC4ini(Pwd As String)
Dim temp As Integer, a As Integer, b As Integer
b = 0
'temp = 0 'testausta
For a = 0 To 255
b = b + 1
If b > Len(Pwd) Then
b = 1
End If
kep(a) = Asc(Mid$(Pwd, b, 1))
Next a
For a = 0 To 255
s(a) = a
Next a
b = 0
For a = 0 To 255
b = (b + s(a) + kep(a)) Mod 256
temp = s(a)
s(a) = s(b)
s(b) = temp
Next a
End Sub
Public Function EnDeCryptSingle(plainbyte As Byte) As Byte
'RC4 kryptaus
Dim temp As Integer, k As Integer
Dim cipherby As Byte
i = (i + 1) Mod 256
j = (j + s(i)) Mod 256
temp = s(i)
s(i) = s(j)
s(j) = temp
k = s((s(i) + s(j)) Mod 256)
cipherby = plainbyte Xor k
EnDeCryptSingle = cipherby
End FunctionHelppo ratkaisu on purkaa viesti aina kahdesti, jos kerran tämä toimii.
Jos haluat selvittää, miksi ohjelma käyttäytyy näin, tutki ohjelman toimintaa rivi riviltä ja vertaa sitä RC4:n määrittelyyn.
Olen tuota tutkinut varmaan miljoona kertaa eikä ole selvinnyt, miksi se niin tekee.
On käyty rivi riviltä ja käytetty vaikka mitä tapoja, mutta ei ole selvinnyt.
Kahteen kertaan "ohjelmallisesti" purkukaan ei oikein tulisi kyseeseen, vaan olisi kyllä tarkoitus saada se toimimaan ihan yhdelläkin kertaa.
Ongelma selvisi.
moduulin muuttujien määrityksissä oli hieman ongelmia.
Aihe on jo aika vanha, joten et voi enää vastata siihen.