chyba při cryptování RijndaelManaged   zodpovězená otázka

VB.NET

Neco mam blbe, ale co? Vypisuje tuto chybu:

System.Security.Cryptography.CryptographicException was unhandled

Message="Specified initialization vector (IV) does not match the block size for this algorithm."

Source="mscorlib"

kod:

Private keyb() As Byte = StrToByteArray("neco1")
    Private ivb() As Byte = StrToByteArray("neco2")
    Public Function StrToByteArray(ByVal str As String) As Byte()
        Dim encoding As New System.Text.ASCIIEncoding()
        Return encoding.GetBytes(str)
    End Function 'StrToByteArray
    Public Function ByteToStrArray(ByVal dBytes() As Byte) As String
        Dim enc As New System.Text.ASCIIEncoding()
        Return enc.GetString(dBytes)
    End Function
    Public Function EncodeString(ByVal str$) As String
        Dim outStr As String
        ' Set up the streams and stuff
        Dim ms As New MemoryStream()
        Dim rv As New System.Security.Cryptography.RijndaelManaged()
'***** nasleduje chyba *****
        Dim cs As New Cryptography.CryptoStream(ms, rv.CreateEncryptor(keyb, ivb), System.Security.Cryptography.CryptoStreamMode.Write)
        Dim p() As Byte = Encoding.ASCII.GetBytes(str.ToCharArray())
        Dim encodedBytes() As Byte

        Try
            cs.Write(p, 0, p.Length) ' write to stream as encrypted data
            cs.FlushFinalBlock()
            encodedBytes = ms.ToArray ' Convert the stream to something we can use
        Catch ex As Exception
        Finally
            ms.Close()
            cs.Close()
        End Try
        outStr = Convert.ToBase64String(encodedBytes)
        Return outStr
    End Function

    Sub main()
        Dim l As String = EncodeString("dddeeeffff123456789")
    End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Máte chybu ve velikosti inicializačního vektoru. Velikost inicializačního vektoru (počet prvků v poli IV) musí odpovídat velikosti bloku BlockSize, který je uveden v bitech. Tudíž velikost pole IV musí být přesně BlockSize * 8. Povolené velikosti bloku zjistíte pomocí LegalBlockSizes.

Nezapomeňte, že pro korektní dešifrování je nutné mít nastaven stejný inicializační vektor jako byl při šifrování!!!

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jak by se to dalo upravit pro libovolný počet prvků v IV a KEY,aby to šlo následně dekryptovat? Puvodne tam bylo pole byte s IV -16 a KEY-32 prvků. Napadá mě jedině doplňovani do potřebného počtu prvků. Ale co když přeteče? Existuje jednoduší opatření? Dik moc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Já bych si metodami GenerateIV a GenerateKey nechal klíč a iniciační vektor vygenerovat, pak ho někam vypsal a nakonec doplnil natvrdo do kódu. Budete mít jistotu, že velikost bude správná. Anebo ho můžete pro každé šifrování generovat znovu.

Doporučuji podívat se na tento článek:

http://www.aspnet.cz/Articles/147-symetr...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Z uvedeného článku jsem se o Rijndael metodě poprvé dozvěděl. Bohužel souvislosti mi docházejí dost pomalu. Moje programování, pokud se to dá vůbec tak nazvat je hodně mladé. Moje 1. šifrování jsem začal přes MD5Hash, ale 60-70 znakové kody mi příjdou hodně přehnané vzhledem k tomu co chránim.

Každopádně dik všem za rady.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

MD5 není šifrování, ale jednosměrný zatřiďovací algoritmus. To jen tak na okraj, aby si někdo náhodou nemyslel, že z hodnoty MD5 hash jdou zpětně dostat původní data...

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback