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
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
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?
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
Aika hyödykäs joo.
no jo on koodia, siisti:)
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
Joo, Caesar käytti tosiaan avaimena kolmosta, mutta voihan siihen käyttää, mitä itse tahtoo, ja tuo ohjelma käyttää kaikki 28:aa.
Ihan hyvältä vaikuttaa...
Sori, mut toi "poista kommentti" ei oikee taho toimii :/
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.
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.