Kirjautuminen

Haku

Tehtävät

Koodit: VB6: Caesarin salaus

Kirjoittaja: hunajavohveli

Kirjoitettu: 20.06.2004 – 20.06.2004

Tagit: teksti, koodi näytille, vinkki

Yksi tunnetuimmista vanhoista salauksista lienee tiettävästi Julius Caesarin kehittämä aakkosten eteenpäin siirtäminen, jolloin jokainen a muuttuu b:ksi, jokainen b muuttuu c:ksi jne. Lopulta aakkosten viimeinen kirjain ö muuttuu a:ksi, ja näin aakkoset alkavat taas alusta. Salauksen avaimena toimii siis määrä, joka kertoo, montako merkkiä kirjaimia siirretään eteenpäin. Näin ollen avaimia on yhteensä 28. 29. siirto kiertäisi aakkoset kokonaan ympäri ja päädyttäisiin samaan tulokseen, josta aloitettiin.
Tällä ohjelmalla voi salata tekstiä Caesarin salauksella, sekä purkaa jo salatun tekstin. Sinänsähän Caesarin salauksella ei ole nykypäivien salaustekniikoiden kannalta mitään virkaa, sillä se on helppo murtaa kokeilemalla jokaista avainta, kunnes saadaan selvää tekstiä. Mutta tämä ohjelma voi toimia pohjana muillekin salauksille. Riittää, kun vain vaihtaa varsinaisen salausalgoritmin sisältävän aliohjelman.

Formille luotavat oliot:
4 CommandButtonia "Encrypt", "SaveList", "LoadList" ja "CopyChosen"
2 Tekstikenttää "Plain" ja "FileName"
1 ListBox "Cipher"

Kirjoita salattava teksti ylimpään TextBoxiin ja klikkaa "Salaa", jolloin listaan ilmestyy sama teksti salattuna kaikilla 28 avaimella. Valitsemalla "Tallenna lista" voit tallentaa listan tiedostoon, jonka nimen voit määrittää alimmaisesta TestBoxista. Valitsemalla "Lataa lista" voit ladata tiedostoon aikaisemmin tallennetun listan. Valitsemalla "Kopioi valittu salaus" voit kopioida listasta valitsemasi salauksen ylimpään TextBoxiin, jolloin voit murtaa salauksen valitsemalla "Salaa". Yksi listaan tulevista vaihtoehdoista on alkuperäinen teksti.

Private Sub Form_Load()

'pistetään kaikki paikoilleen...

Form1.ScaleMode = 3

Form1.Width = 5985: Form1.Height = 4110
Plain.Left = 8: Plain.Top = 8: Plain.Width = 185: Plain.Height = 25
Cipher.Left = 8: Cipher.Top = 40: Cipher.Width = 377: Cipher.Height = 134
Encrypt.Left = 200: Encrypt.Top = 8: Encrypt.Width = 185: Encrypt.Height = 25
SaveList.Left = 8: SaveList.Top = 184: SaveList.Width = 121: SaveList.Height = 33
LoadList.Left = 136: LoadList.Top = 184: LoadList.Width = 121: LoadList.Height = 33
CopyChosen.Left = 264: CopyChosen.Top = 184: CopyChosen.Width = 121: CopyChosen.Height = 33
FileName.Left = 8: FileName.Top = 224: FileName.Width = 377: FileName.Height = 19
Plain.Text = ""
FileName.Text = "salaus.dat"
Encrypt.Caption = "Salaa"
SaveList.Caption = "Tallenna Lista"
LoadList.Caption = "Lataa lista"
CopyChosen.Caption = "Kopioi valittu salaus"

End Sub
Private Sub Encrypt_Click()

Static Text As String
Static Text2 As String

Text = LCase(Plain.Text)     'vain pienet kirjaimet

Cipher.Clear              'tyhjätään vanha lista

For Key = 1 To 28           'avaimia on 28 mahdollista
Text2 = ""
  For a = 1 To Len(Text)              'käydään läpi kirjaimet yksitellen
    If Mid(Text, a, 1) <> " " Then
      Text2 = Text2 + Char((Num(Mid(Text, a, 1)) + Key) Mod 29)   'kryptaus
    Else
      Text2 = Text2 + " "     'välilyönnit pidetään ennallaan
    End If
  Next a
Cipher.AddItem Text2       'kopioidaan listaan
Next Key

End Sub
Function Char(ByVal Index As Integer) As String

'QB:n HoneyLibistä lainattu funktio
'palauttaa kirjaimen a-ö indekseillä 0-28

Select Case Index
Case 0 To 25
  Char = Chr(Index + 97)
Case 26
  Char = "å"
Case 27
  Char = "ä"
Case 28
  Char = "ö"
End Select

End Function

Function Num(Char As String) As Byte

'Char-funktio käänteisfunktio
'palauttaa indeksin 0-28 argumentiksi saadusta kirjaimesta a-ö
'ASCII-koodi ei käynyt, koska ääkköset eivät ole a-z perässä

Select Case Asc(Char)
Case 97 To 122
  Num = Asc(Char) - 97
Case 228
  Num = 27
Case 229
  Num = 26
Case 246
  Num = 28
End Select

End Function
Private Sub CopyChosen_Click()

Plain.Text = Cipher  'kopioidaan valittu kohta tekstikenttään

End Sub

Private Sub LoadList_Click()

Cipher.Clear    'tyhjätään lista

Static Temp As String

Open FileName.Text For Input As #1  'luetaan tiedostosta
  Do While Not EOF(1)
    Input #1, Temp
    Cipher.AddItem Temp
  Loop
Close #1

End Sub

Private Sub SaveList_Click()

Open FileName.Text For Output As #1  'kirjoitetaan tiedostoon
  For a = 0 To 27
    Print #1, Cipher.List(a)
  Next a
Close #1

End Sub

Kommentit

zigilii [22.06.2004 11:27:06]

#

Microsoft Visual Basic kirjoitti:

Run-time error '438':

Object dosen't support this property or method

Tommonen error tulee ja valittaa "Cipher.Clear"-riviä

Mulla on vb6

hunajavohveli [22.06.2004 12:31:45]

#

Tein tuon VB5:lla. En kyllä oikein usko, että vitosessa olisi ListBoxilla Clear-metodi, mutta kutosessa ei. Pistithän siihen varmasti ListBoxin, etkä jotain muuta oliota?

zigilii [22.06.2004 13:10:51]

#

Nyt toimii, en tiä mikä siinä oli, mutta ihan sama

Hieno ohjelma

EDIT: laittakaa "abcdefghijklmnopqrstuvwxyzåäö" Siittä tulee hieno ja menkää sitä listboxii ylös -> alas -> ylös -> alas -> ylös -> alas

sooda [22.06.2004 13:37:59]

#

Aika hyödykäs joo.

Zapi [22.06.2004 17:08:28]

#

no jo on koodia, siisti:)

makeuu [22.06.2004 18:07:56]

#

Luin juuri eilen Mikrobitistä että kirjaimet muuttuvat kolme kirjainta aakkosissa eteenpäin joten a on d.. ja b on e...

edit: okei, voin olla hyvinkin väärässä tai oikeassa :D

hunajavohveli [22.06.2004 18:30:07]

#

Joo, Caesar käytti tosiaan avaimena kolmosta, mutta voihan siihen käyttää, mitä itse tahtoo, ja tuo ohjelma käyttää kaikki 28:aa.

TETRIS [22.06.2004 21:26:42]

#

Ihan hyvältä vaikuttaa...

FastSnail [07.08.2005 00:40:27]

#

Sori, mut toi "poista kommentti" ei oikee taho toimii :/

Tuplanolla [18.08.2005 20:29:03]

#

lainaus:

Tein tuon VB5:lla. En kyllä oikein usko, että vitosessa olisi ListBoxilla Clear-metodi, mutta kutosessa ei. Pistithän siihen varmasti ListBoxin, etkä jotain muuta oliota?

No jos on Option Explicit päällä niin pitää laittaa General Declerations osioon rivi "Dim Clear".

Taisin lukea väärin.
Onhan tuo ihan kätevä, itse kyllä käytän mieluiten SXOR tai jotakin muuta (Blowfish, CryptAPI, DES, Gost, RC4, Skipjack, TEA, Twofish) kryptausta salaamiseen.

hunajavohveli [20.08.2005 20:18:31]

#

Juu, jos vakavissaan haluaa jotain salata, niin tätä ei pidä missään nimessä käyttää. :) Itsekin käyttelen yleensä XORia silloin, kun jotain oikeasti pitää suojata.

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta