Vigenèren salauksen toimintaperiaate on varsin yksinkertainen. On 29*29 taulukko, johon on laitettu siis kaikki suomalaisen aakkoston kirjaimet 29 kertaa. Ne eivät kuitenkaan ole taulukossa sekaisin, vaan niillä on tietty järjestys (en osaa kuvailla sitä, mutta ohjelma piirtää taulukon, josta se käy ilmi)
Kun salataan, käydään läpi jokainen merkki salattavasta tekstistä, ja otetaan sen pariksi vastaava merkki avaimesta. (kuin kaikki avaimen merkit on käyty loppuun, aloitetaan jälleen avaimen ensimmäisestä merkistä)
Tämä kirjainpari määrää, mikä kirjain salatekstiin tulee. Avaimen kirjain määrä taulukosta rivin ja salattavan tekstin kirjain määrä taulukosta sarakkeen. Sitten vain katsotaan, mikä kirjain taulukossa on sillä kohdalla, ja lisätään se salatekstiin. Kun kaikki kirjaimet on käyty läpi, salateksti on valmis.
Luo formille yksi CommandButton ja kolme TextBoxia. (Kolmannen näistä (Text3:n) MultiLine pitää olla True)
Huom:
AutoReDraw pitää olla True jotta taulukko näkyy!
Salattavassa tekstissä saa olla vain suomalaisen aakkoston kirjaimia ja välilyöntejä. Muuten salaus bugittaa ja jokaisen väärän merkin tilalle tulee luultavasti a.
Private Sub Form_Load() 'pistetään kaikki paikoilleen Form1.Width = 13000: Form1.Height = 9000: Form1.ScaleMode = 3 Text1.Text = "salattava teksti": Text1.Left = 600: Text1.Top = 100: Text1.Width = 220: Text1.Height = 20 Text2.Text = "avain": Text2.Left = 600: Text2.Top = 120: Text2.Width = 220: Text2.Height = 20 Command1.Caption = "Salaa": Command1.Left = 600: Command1.Top = 150: Command1.Width = 220: Command1.Height = 60 Text3.Text = "": Text3.Left = 600: Text3.Top = 220: Text3.Width = 220: Text3.Height = 100 PiirräTaulukko 'nimi kertoo kaiken End Sub
Private Sub Command1_Click() Static Selko As String Static Sifferi As String Static Avain As String Static AvainPituus As Byte Static Merkki As Byte Static MKAvain As Byte Selko = LCase(Text1.Text) 'vain pienet kirjaimet Avain = LCase(Text2.Text) AvainPituus = Len(Avain) Sifferi = "" Text3.Text = "" 'käydään selkoteksti läpi merkki merkiltä For a = 1 To Len(Selko) If Mid(Selko, a, 1) <> " " Then 'jos ei ole välilyönti Merkki = Num(Mid(Selko, a, 1)) MKAvain = Num(Mid(Avain, ((a - 1) Mod AvainPituus) + 1, 1)) 'valitaan avaimesta oikea salausmerkki Sifferi = Sifferi + Char((Merkki + MKAvain) Mod 29) 'kryptaus Else Sifferi = Sifferi + " " 'jos on välilyönti End If Next a Text3.Text = Sifferi 'näytetään sifferiteksti TextBoxissa End Sub
Function Char(ByVal Index As Integer) As String 'QB:n HoneyLibistä (oma kirjastoni) lainattu funktio 'palauttaa kirjaimen a-ö argumenteilla 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 'HoneyLibistä tämäkin 'Char-funktion 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
Sub PiirräTaulukko() Form1.ScaleMode = 3 'pikselit käyttöön Size = 29 'taulukon koko 'taulukon piirtorutiini For a = 0 To Size Line (80, a * 15 + 80)-(80 + Size * 15, a * 15 + 80) Line (a * 15 + 80, 80)-(a * 15 + 80, 80 + Size * 15 + 1) Next a Form1.ScaleMode = 4 'merkit käyttöön Form1.CurrentX = 31 Form1.CurrentY = 2 Print "Vigenèren taulukko" 'lisätään kirjaimet taulukkoon For b = 0 To 28 For a = 0 To 28 Form1.CurrentX = a * 1.88 + 10.5 Form1.CurrentY = b * 0.938 + 5.05 Print Char((a + b) Mod 29) Next a Next b 'ja reunoille For b = 0 To 28 Form1.CurrentX = -1 * 1.88 + 10.5 Form1.CurrentY = b * 0.938 + 5.05 Print Char(b) Next b For a = 0 To 28 Form1.CurrentX = a * 1.88 + 10.5 Form1.CurrentY = -1 * 0.938 + 5.05 Print Char(a) Next a End Sub
Viitsisikö joku tehdä intin "matolaatikkosalauksen" VB:llä. Oli käytössä sotien aikana ja vielä 80-luvulla aina Sanlan tuloon asti.
Jos saisi jostain tietää, miten sellainen toimii, niin voisinpa jossain välissä ehkä koodatakin sellaisen.
Google kirjoitti:
Mikä sitten olikaan otsikon "matolaatikko"? Se on puulaatikko, jonka päällä on siirrettävät, kohtisuoraan toisiaan vastaan olevat viivaimet. Laatikon pohjalle asetetaan koodiavaimen sisältävä paperiruudukko, ja koodausta muutetaan päivittäin. Menetelmä on hidas, mutta tehokas, sillä se perustuu sattumaan. Suomalaiset käyttivät "matolaatikkoa" talvi- ja jatkosodan aikana menestyksekkäästi. Se oli niitä harvoja kryptausmenetelmiä, joita ei onnistuttu murtamaan. Niinpä Suomen rauhanehtoihin kirjattiin, että tämä Enigman voittanut salakirjoitusmenetelmä oli paljastettava.
tätähän ei voi dekoodata?
Voi kyllä, ja siinä oppaasta, mistä tuon periaatteen luin, oli myös ohjeet purkamiseen. En nyt vain tarkalleen muista, mitä kaikkea siinä piti tehdä. Kirjainten esiintymistiheydellä taisi olla kuitenkin jotain merkitystä.
Ai niin, tämähän on symmetrinen salausmenetelmä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.