Страница: 1 |
Страница: 1 |
Вопрос: As Byte
Добавлено: 21.11.06 15:46
Автор вопроса: avdey | ICQ: 219571279
Есть у меня переменная Key() As Byte, т.е. массив байтов, но эта переменная должна быть постоянного размера в 32 байта. У меня так:
Dim enc As New UnicodeEncoding
Return enc.GetBytes(s)
End Function
Key = ToBytes(txtKey1.Text)
Тоесть вводишь текстовый ключ, а ToBytes переводит текст в массив байтов, и чтобы получилась длина в 32 байта нужно вводить 16 символов, если введешь меньше, тогда размер массива будет меньше и программа выдает ошибку! Как в этом случае сделать чтоб Key() был размером в 32 байта, всегда.
Приму любую помосчь (кроме 20 WMZ)))))
Ответы
Всего ответов: 13
Номер ответа: 1
Автор ответа:
avdey
ICQ: 219571279
Вопросов: 34
Ответов: 486
Профиль | | #1
Добавлено: 21.11.06 15:48
Да, забыл, массив байтов Key() передается в одну функцию, которая принимает только 32 байта, иначе ошибка...
Номер ответа: 2
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #2
Добавлено: 21.11.06 16:13
MyString = MyString + String((16 - Len(MyString)), Chr(32))
End If
Номер ответа: 3
Автор ответа:
avdey
ICQ: 219571279
Вопросов: 34
Ответов: 486
Профиль | | #3
Добавлено: 21.11.06 16:39
Мысль у меня такая была, но коряво это как-то...
Номер ответа: 4
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #4
Добавлено: 21.11.06 16:47
Get
Return _Name
End Get
Set(ByVal value As String)
If value IsNot Nothing Then
If value.Length > NameMaxLength Then
Throw New DataTooLongException(NameMaxLength)
End If
_Name = value
Else
_Name = ""
End If
End Set
End Property
А это не коряво?
Номер ответа: 5
Автор ответа:
Pashenko
ICQ: 176176951
Вопросов: 14
Ответов: 655
Профиль | | #5
Добавлено: 21.11.06 16:48
Номер ответа: 6
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #6
Добавлено: 21.11.06 16:48
Get
Return _Name
End Get
Set(ByVal value As String)
If value IsNot Nothing Then
If value.Length > NameMaxLength Then
Throw New DataTooLongException(NameMaxLength)
End If
_Name = value
Else
_Name = ""
End If
End Set
End Property
А это не коряво?
Номер ответа: 7
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #7
Добавлено: 21.11.06 16:51
В .NET это не работает.
Номер ответа: 8
Автор ответа:
Viper
ICQ: 249094859
Вопросов: 0
Ответов: 310
Профиль | | #8
Добавлено: 22.11.06 10:37
Dim Key(1 To 32) As Byte
конечно не работает, но работает другая фишка:
Dim Key(31) As Byte
З.Ы. А в какую функцию надо передать ключ, типа API какой-то? Неплохо бы увидеть прототип
Номер ответа: 9
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #9
Добавлено: 22.11.06 10:47
Dim Key(31) As Byte
Не понятно правда как это может помочь
Номер ответа: 10
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #10
Добавлено: 22.11.06 10:57
Очевидно в какой-то класс из System.Security.Cryptography, возможно, в RijndaelManaged
Номер ответа: 11
Автор ответа:
avdey
ICQ: 219571279
Вопросов: 34
Ответов: 486
Профиль | | #11
Добавлено: 22.11.06 13:57
2Brand
В точку!
Key = ToBytes(txtKey1.Text)
' Интерфейс-шифратор
Dim AES_Encryptor As ICryptoTransform = AES.CreateEncryptor(Key, IV)
Но товой код всеравно не работает.
Придется наверно отслеживать текст и дополнять его пробелами...
Номер ответа: 12
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #12
Добавлено: 22.11.06 17:33
Да чего париться? создать буффер из 32 байт(пустой с нулями), и в него копировать то, что возвращает enc.GetBytes(s) и всего делов!!
А копировать уже либо через маршаллинг, либо по простому, через CopyTo ..
вот как то так
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim Key() As Byte = GetKey("Вася Пупкин"
Dim sb As New System.Text.StringBuilder
For Each item As Byte In Key
sb.Append(item & " "
Next
Dim userMessage As String = String.Format("Key length is: {0} bytes", Key.Length) & vbNewLine
userMessage &= "Key contains: " & sb.ToString.TrimEnd
MessageBox.Show(userMessage, _
Me.Text, _
MessageBoxButtons.OK, _
MessageBoxIcon.Information)
End Sub
Private Function GetKey(ByVal Key As String) As Byte()
If String.IsNullOrEmpty(Key) Then Throw New ArgumentNullException("Key"
If Key.Trim.Length > 16 Then Throw New ArgumentOutOfRangeException("Key"
Dim arrayKey(31), bytes() As Byte
bytes = System.Text.Encoding.Unicode.GetBytes(Key.Trim)
Array.Copy(bytes, arrayKey, bytes.Length)
Return arrayKey
End Function
End Class
Номер ответа: 13
Автор ответа:
avdey
ICQ: 219571279
Вопросов: 34
Ответов: 486
Профиль | | #13
Добавлено: 23.11.06 11:36
Интересно... Попробую...