Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: As Byte Добавлено: 21.11.06 15:46  

Автор вопроса:  avdey | ICQ: 219571279 
Есть у меня переменная Key() As Byte, т.е. массив байтов, но эта переменная должна быть постоянного размера в 32 байта. У меня так:
Private Function ToBytes(ByVal s As String) As Byte()
        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-сайт: sham.clan.su
 Профиль | | #2
Добавлено: 21.11.06 16:13
Тоесть вводишь текстовый ключ, а ToBytes переводит текст в массив байтов, и чтобы получилась длина в 32 байта нужно вводить 16 символов, если введешь меньше, тогда размер массива будет меньше и программа выдает ошибку! Как в этом случае сделать чтоб Key() был размером в 32 байта, всегда.
Заполнить все остальное пробелами, предваритьльно проверив длину строки
If Len(MyString) < 16 Then
    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
Public Property Name() As String
        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
Dim Key(1 to 32) As Byte
?

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #6 Добавлено: 21.11.06 16:48
    Public Property Name() As String
        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
Dim Key(1 to 32) As Byte

В .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
З.Ы. А в какую функцию надо передать ключ, типа API какой-то? Неплохо бы увидеть прототип

Очевидно в какой-то класс из System.Security.Cryptography, возможно, в RijndaelManaged

Ответить

Номер ответа: 11
Автор ответа:
 avdey



ICQ: 219571279 

Вопросов: 34
Ответов: 486
 Профиль | | #11 Добавлено: 22.11.06 13:57
2Brand
В точку!

Dim AES As New RijndaelManaged
        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 ..

вот как то так
Public Class frmMain

    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
Интересно... Попробую...

Ответить

Страница: 1 |

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



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