Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: VB.NET: DES-salaus

Sivun loppuun

tnb [21.01.2004 00:30:30]

#

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

killerfox [22.01.2004 14:55:11]

#

Muokkaappa tuo vb kuutoselle.

hunajavohveli [18.06.2004 19:44:06]

#

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.

theman [05.08.2004 12:06:57]

#

mistä saa sen salatun texstin esille

johan123 [29.12.2004 11:46:32]

#

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....)

tnb [29.12.2004 23:12:53]

#

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."

thekoodaaja [31.03.2005 07:25:54]

#

"täk"? WTF. Taisi mennä yli hilseen. :D

NixDu [17.01.2007 01:19:40]

#

Ei toimi toi koodi... Muokkaa alkuteksteihin että tiedoston nimi pitää olla test.txt eikä text.txt


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta