3DES sakirjoituksen avain on 168 bittiä ja on tiettävästi murtamaton. Mnetelmä on symmetrinen eli avataan samalla avaimella kuin salataankin. Avaimia on kaksi: desKey on 3*8 tavua ja on varsinainen avain. desIV on aloitusvektori jolla XORataan ensimmäinen 64 bitin lohko joka sitten DES koodataan. Saadulla 64 bitin luvulla XORataan seuraava 64 bit lohko joka DES koodataan jne.
Oheinen ohjelma luo satunnaist DES avaimet ja salakirjoittaa tiedoston (Tässä C:\text.txt joka täytyy olla tehtynä). DES avaimet talletetaan tiedostoon salakirjoitettuna annetun salasanan perusteella.
Heti perään ohjelma vielä lukee ja purkaa salakirjoitetut avaimet ja lopuksi avaan 3DES salakirjoitetun tiedoston.
Tee: form, button1 ja textbox1 sekä lisää class FileCrypt johon osa koodista tulee.
' Tämä aivan tekstin alkuun formin yläpuolelle Imports System.Security.Cryptography
Button1 tapahtumaan
'salaa tiedosto random avaimella ja tallentaa avaimen salattuna avain tiedostoon Dim inName As String 'salattava tiedosto Dim outName As String 'salattutiedosto Dim avattuName As String 'salattutiedosto Dim avaimetName As String ' avainten tiedosto salattuna Dim desKey(23) As Byte 'avain 24=3*8 tavua Dim desIV(7) As Byte ' aloitusvektori 8 tavua Dim i As Integer Dim password As String TextBox1.Text = "" Dim rng As New RNGCryptoServiceProvider 'random number generator 'valitaan jokin salausavain rng.GetBytes(desKey) 'valitaan jokin aloitusvektori rng.GetBytes(desIV) password = InputBox("Anna salasana", "SALAKIRJOITETAAN", "salasanaXYZ8") 'tidostonimet inName = "C:\test.txt" outName = "C:\salattu_test.des" avattuName = "C:\test_avattu.txt" avaimetName = "C:\DESavaimet.bin" 'avaimet tallessa salattuna salasanalla password 'luokka FileCrypt on SHARED =>> ei tarvitse tehdä instanssia 'salataan FileCrypt.EncryptData(inName, outName, desKey, desIV) FileCrypt.SaveKeyToFile(desKey, desIV, avaimetName, password) 'avaimet talteen TextBox1.Text = "Salaus tehty" 'avataan salaus password = "" password = InputBox("Anna salasana", "AVATAAN SALAKIRJOITUS", "salasanaXYZ8") FileCrypt.OpenKeyFromFile(desKey, desIV, avaimetName, password) FileCrypt.DecryptData(outName, avattuName, desKey, desIV) TextBox1.Text = "Salaus ja avaus tehty"
FileCrypt moduliin
Imports System Imports System.IO Imports System.Xml Imports System.Text Imports System.Security.Cryptography Public Class FileCrypt 'tiedoston salakirjoitus TripleDES menetelmällä 3*56 bittiä Public Shared Sub EncryptData(ByVal inName As String, ByVal outName As String, _ ByVal desKey() As Byte, ByVal desIV() As Byte) 'Create the file streams to handle the input and output files. Dim fin As New FileStream(inName, FileMode.Open, FileAccess.Read) Dim fout As New FileStream(outName, FileMode.OpenOrCreate, _ FileAccess.Write) fout.SetLength(0) 'Create variables to help with read and write. Dim bin(4096) As Byte 'This is intermediate storage for the encryption. Dim rdlen As Long = 0 'This is the total number of bytes written. Dim totlen As Long = fin.Length 'Total length of the input file. Dim len As Integer 'This is the number of bytes to be written at a time. Dim tdes As New TripleDESCryptoServiceProvider Dim encStream As New CryptoStream(fout, _ tdes.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write) 'Read from the input file, then encrypt and write to the output file. While rdlen < totlen len = fin.Read(bin, 0, 4096) encStream.Write(bin, 0, len) rdlen = Convert.ToInt32(rdlen + len / tdes.BlockSize * tdes.BlockSize) End While encStream.Close() fout.Close() fin.Close() End Sub Public Shared Sub DecryptData(ByVal inName As String, ByVal outName As String, _ ByVal desKey() As Byte, ByVal desIV() As Byte) 'Create the file streams to handle the input and output files. Dim fin As New FileStream(inName, FileMode.Open, FileAccess.Read) Dim fout As New FileStream(outName, FileMode.OpenOrCreate, _ FileAccess.Write) fout.SetLength(0) 'Create variables to help with read and write. Dim bin(4096) As Byte 'This is intermediate storage for the encryption. Dim rdlen As Long = 0 'This is the total number of bytes written. Dim totlen As Long = fin.Length 'Total length of the input file. Dim len As Integer 'This is the number of bytes to be written at a time. Dim tdes As New TripleDESCryptoServiceProvider Dim encStream As New CryptoStream(fout, _ tdes.CreateDecryptor(desKey, desIV), CryptoStreamMode.Write) 'Read from the input file, then encrypt and write to the output file. While rdlen < totlen len = fin.Read(bin, 0, 4096) encStream.Write(bin, 0, len) rdlen = Convert.ToInt32(rdlen + len / tdes.BlockSize * tdes.BlockSize) End While Try encStream.Close() Catch ex As Exception MsgBox("EI ONNISTU") ' Show friendly error message. End Try fout.Close() fin.Close() End Sub Public Shared Sub SaveKeyToFile(ByVal desKey() As Byte, ByVal desIV() As Byte, ByVal fname As String, ByVal password As String) Dim desIV2(8) As Byte Dim desKey2(24) As Byte 'tallentaa avaimet temp tiedostoon Dim fout As New FileStream(fname + "_temp", FileMode.OpenOrCreate, FileAccess.Write) fout.SetLength(0) fout.Write(desKey, 0, 24) 'avain talteen fout.Write(desIV, 0, 8) ' aloitusvektori talteen fout.Close() password = password + password + password + password + password + password + password + password password = password.PadRight(32) desKey2 = System.Text.Encoding.UTF8.GetBytes(password.Substring(0, 24)) desIV2 = System.Text.Encoding.UTF8.GetBytes(password.Substring(25)) 'salataan vielä avaimet FileCrypt.EncryptData(fname + "_temp", fname, desKey2, desIV2) File.Delete(fname + "_temp") End Sub Public Shared Sub OpenKeyFromFile(ByVal desKey() As Byte, ByVal desIV() As Byte, ByVal fname As String, ByVal password As String) Dim desIV2(8) As Byte Dim desKey2(24) As Byte 'pura avainten salakirjoitus password = password + password + password + password + password + password + password + password password = password.PadRight(32) 'minimipituus desKey2 = System.Text.Encoding.UTF8.GetBytes(password.Substring(0, 24)) desIV2 = System.Text.Encoding.UTF8.GetBytes(password.Substring(25)) FileCrypt.DecryptData(fname, fname + "_temp", desKey2, desIV2) 'avaa avaimet tiedostosta Dim fout As New FileStream(fname + "_temp", FileMode.Open, FileAccess.Read) fout.Read(desKey, 0, 24) fout.Read(desIV, 0, 8) fout.Close() File.Delete(fname + "_temp") End Sub End Class
Muokkaappa tuo vb kuutoselle.
Hyvältä näyttää ainakin sen mukaan mitä DES-salauksesta tiedän. Kokeilemaan en harmikseni pääse, kun ei ole .NET-kääntäjää. Mutta eiköhän jo 128 bitin salauksen murto veisi tähtitieteellisiä aikoja, vaikka miljardi konetta kokeilisi brute forcella miljardi avainta sekunnissa.
mistä saa sen salatun texstin esille
On se vain outoa että siitä luulee että jokin on murtamaton, mutta pari vuotta menee ja joku keksii algoritmin joka suorittaa testauksen 10^10 kertaa nopeemmin, ja bam, sitten siirrytään 256 bittisiin salauksiin ja kutsutaan niitä murtamattomiksi.
Tällä hetkellä on yksi salausmenetelmä jota ei ole voitu murtaa, se perustuu kvantimekaniikan outoihin ominaisuuksiin. Tämä salausmenetelmä otettaan käyttöön (tietävästi) ensi vuonna, sen murtaminen on mahdotonta koska mitään tietoa ei siirretä. Jos haluat tietää lisää niin goglaa, tai hanki opiskelupaikka TKK:n fysiikan osastolta (molemmat paikat antavat kuitenkin selityksen mikä menee yli hilseen....)
kvanttimekaniikasta:
TKK:n fysiikan osastoa ei tarvita, riittää kun seuraa Tähtiporttia.
"Jokaisella partikkelilla on vastapartikkeli ja kun partikkelia häiritään, näkyy muutos heti myös vastapartikkelissa, riippumatta siitä missä aurinkikunnassa/galaksissa se on."
"täk"? WTF. Taisi mennä yli hilseen. :D
Ei toimi toi koodi... Muokkaa alkuteksteihin että tiedoston nimi pitää olla test.txt eikä text.txt
Aihe on jo aika vanha, joten et voi enää vastata siihen.