Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Как задают ключ строкой в шифровании? Добавлено: 23.03.07 21:24  

Автор вопроса:  ZXC
В шифровании в VB.NET ключ это набор байтов
Dim Key As Byte() = {1, 2, 3, 4, 5, 6, 7, 8, 55, 10, 2, 12, 13, 14, 15, 16} 'Ключ
    Dim IV As Byte() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} 'Вектор инициализации

Но в других программах много раз видел как в качестве ключа можно использовать строку, как это реализуется? подскажите, ведь ключ может быть равен 8, 16, 24, 32 байтам...

Ответить

  Ответы Всего ответов: 13  

Номер ответа: 1
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #1 Добавлено: 23.03.07 21:45
строка легко переводится в массив байт а затем дополняется или обрезается до нужной длины..

Ответить

Номер ответа: 2
Автор ответа:
 ZXC



Вопросов: 30
Ответов: 106
 Профиль | | #2 Добавлено: 23.03.07 22:11
Ну допустим зашифровать ещё можно, обрежим прировняем...но а расшифровать тогда как? если учитывая это:
обрезается до нужной длины..

как если обрезать потом востановить для дешифровки? не пойму )

Ответить

Номер ответа: 3
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #3 Добавлено: 23.03.07 22:24
К примеру у тебя пароль "Вася Пупкин" - это 11 символов = 22 байта.. значит добавляешь еще 2 нуль символа и используешь этот массив как для шифровки так и для дешифровки...

Ответить

Номер ответа: 4
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #4 Добавлено: 23.03.07 22:26
А если ключ на 16 байт.. значит в качестве пароля будешь использовать только первые 8 символов..

Ответить

Номер ответа: 5
Автор ответа:
 ZXC



Вопросов: 30
Ответов: 106
 Профиль | | #5 Добавлено: 23.03.07 22:37
Щас чонить сообразить попробую

Ответить

Номер ответа: 6
Автор ответа:
 ZXC



Вопросов: 30
Ответов: 106
 Профиль | | #6 Добавлено: 23.03.07 22:57
Ну вот..надумал :)

If Len(TextBox1.Text) > 8 Then
            strings = Mid(TextBox1.Text, 1, 8)
        End If

        Dim key() As Byte = ToBytes(strings)


Функция первода строки в масив байтов

Private Function ToBytes(ByVal s As String) As Byte()
        Dim enc As New UnicodeEncoding
        Return enc.GetBytes(s)
    End Function

Ответить

Номер ответа: 7
Автор ответа:
 ZXC



Вопросов: 30
Ответов: 106
 Профиль | | #7 Добавлено: 23.03.07 22:57
для дешифровки тже самое,всё работает, EROS спсибо за идею :)

Ответить

Номер ответа: 8
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #8 Добавлено: 23.03.07 23:04
Это еще не все.. )))) А теперь подумай что будет если пароль юзверь введет меньше 8 символов? :-)))

Ответить

Номер ответа: 9
Автор ответа:
 ZXC



Вопросов: 30
Ответов: 106
 Профиль | | #9 Добавлено: 23.03.07 23:18
я уже заметил :) думаю просто сделать так чтобы не возиться: если < 4 символов, вывести сообщение что ключ нельзя меньше 4х символов :) но как то не красиво...щас подумаю ещё немного :)

Ответить

Номер ответа: 10
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #10
Добавлено: 24.03.07 10:36
Банально в Base64 закодировать. Я вот так делал:

    Private Structure Key
        Dim Key As Byte()
        Dim IV As Byte()
    End Structure

    Public Shared Function CreateKeyIV() As String
        Dim RijndaelAlg As Rijndael = Rijndael.Create

        Return Convert.ToBase64String(RijndaelAlg.Key) & "-" & Convert.ToBase64String(RijndaelAlg.IV)
    End Function

    Private Shared Function UnPackKeyIV(ByVal KeyIVString As String) As Key
        Dim strs As String() = Split(KeyIVString, "-";)
        Dim Key As Key
        Key.Key = Convert.FromBase64String(strs(0))
        Key.IV = Convert.FromBase64String(strs(1))

        Return Key
    End Function

Ответить

Номер ответа: 11
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #11
Добавлено: 24.03.07 10:52
Кстати, используя в качестве ключа пароль, задаваемый юзером, ты
сознательно существенно ослабляешь стойкость к взлому. Ибо из
воможных 256 значений каждого байта будет испольоватсья хорошо если 50
(буквы, цифры). Т.е. если длина ключа - 16 байт, то в таком случае
время полного перебора всех возможных значений ключа сократится в 5^16
раз, по сравнению с криптографически случайным набором байт в качестве
ключа. А учитывая, что юзеры придумывают пароли не "Gf6Be%$c3D", а
что-то вроде "мидвед", то подобрать ключ станет еще проще.

Ответить

Номер ответа: 12
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #12 Добавлено: 24.03.07 13:19
обрезать, дополнять... де траву берете товарищи?

Ответить

Номер ответа: 13
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #13 Добавлено: 24.03.07 16:09
Вот пример получения ключа определенной длины по строке.

        Dim Password As String = "Hello world!"
        Dim Salt As Byte() = {0, 1, 2, 3, 4, 5, 6, 7}
        Dim Dev As New Rfc2898DeriveBytes(Password, Salt, 1000)
        Dim Key As Byte() = Dev.GetBytes(16)


Вобщем как-то так.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам