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 Sub
Kryptaus:
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 Sub
Ja 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 Function
Helppo 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.