Страница: 1 |
Страница: 1 |
Вопрос: Как задают ключ строкой в шифровании?
Добавлено: 23.03.07 21:24
Автор вопроса: ZXC
В шифровании в VB.NET ключ это набор байтов
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-сайт:
Профиль | | #10
Добавлено: 24.03.07 10:36
Банально в Base64 закодировать. Я вот так делал:
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-сайт:
Профиль | | #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 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)
Вобщем как-то так.