Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Вопрос по криптографии Добавлено: 23.04.08 01:46  

Автор вопроса:  Abriel
Перечитал MSDN, так и не уразумел... :( Каким образом зашифровать текст в TextBoxе на VB2005, используя средства криптографии .NET и задавая собственный (предопределенный) текстовый ключь, в итоге получая не байтовый массив, а обычную зашифрованную строку??? Разумеется, что также нужно сделать декрипт - используя предопределенный ранее ключь... Будьте-добры, может пример кто покажет?

Ответить

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

Номер ответа: 1
Автор ответа:
 Алексей



black  admin

ICQ: 261779681 

Вопросов: 87
Ответов: 633
 Web-сайт: aleksey.nemiro.ru
 Профиль | | #1
Добавлено: 23.04.08 04:39
http://kbyte.ru/Expert/Show.aspx?id=27
http://kbyte.ru/Forum/Show.aspx?id=5601

а обычную зашифрованную строку???

Base64, ищи в Convert

Ответить

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



Вопросов: 18
Ответов: 37
 Профиль | | #2 Добавлено: 09.05.08 00:31
Ребята, помогите! Используя VB2005 и его стандартные средства криптографии, нужно создать на основе пользовательского логина (в качестве ключа) и пароля (максимальная длина 50 символов) зашифрованую строку не больше 15 символов. В дальнейшем используя тот же логин востановить пароль. Если возможно, на примере?

Ответить

Номер ответа: 3
Автор ответа:
 BUMM ®



Вопросов: 8
Ответов: 482
 Профиль | | #3 Добавлено: 09.05.08 23:04
строку из 50 символов в 15 символов незакриптуешь.

вот простенький пример:

для наглядности переместил 6 переменных, определяющих криптографию, внутрь функции.

Public Function Encrypt(ByVal plainText As String) As String
        'portare fuori dalla funzione
        Dim passPhrase As String = "p@ssPhra$e"        ' puo essere qualsiasi stringa
        Dim saltValue As String = "bla-bla$2007"   ' puo essere qualsiasi stringa
        Dim hashAlgorithm As String = "SHA1"             ' puo anche essere "MD5"
        Dim passwordIterations As Integer = 2                   ' puo essere qualsiasi numero
        Dim initVector As String = "@12BCD34E5F6G78H" ' deve essere 16 bytes
        Dim keySize As Integer = 256                ' puo anche essere 192 or 128
        'portare fuori dalla funzione
        Dim initVectorBytes As Byte() = Encoding.ASCII.GetBytes(initVector)
        Dim saltValueBytes As Byte() = Encoding.ASCII.GetBytes(saltValue)
        Dim plainTextBytes As Byte() = Encoding.UTF8.GetBytes(plainText)
        Dim password As PasswordDeriveBytes = New PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, passwordIterations)
        Dim keyBytes As Byte() = password.GetBytes(keySize / 8)
        Dim symmetricKey As RijndaelManaged = New RijndaelManaged()
        symmetricKey.Mode = CipherMode.CBC
        Dim encryptor As ICryptoTransform = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes)
        Dim memoryStream As MemoryStream = New MemoryStream()
        Dim cryptoStream As CryptoStream = New CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)
        cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length)
        cryptoStream.FlushFinalBlock()
        Dim cipherTextBytes As Byte() = memoryStream.ToArray()
        memoryStream.Close()
        cryptoStream.Close()
        Dim cipherText As String = Convert.ToBase64String(cipherTextBytes)
        Return cipherText
    End Function

    Public Function Decrypt(ByVal cipherText As String) As String

        'portare fuori dalla funzione
        Dim passPhrase As String = "p@ssPhra$e"         ' can be any string
        Dim saltValue As String = "bla-bla$2007"  ' can be any string
        Dim hashAlgorithm As String = "SHA1"             ' can be "MD5"
        Dim passwordIterations As Integer = 2                  ' can be any number
        Dim initVector As String = "@12BCD34E5F6G78H" ' must be 16 bytes
        Dim keySize As Integer = 256                ' can be 192 or 128
        'fino qui
        Dim initVectorBytes As Byte() = Encoding.ASCII.GetBytes(initVector)
        Dim saltValueBytes As Byte() = Encoding.ASCII.GetBytes(saltValue)
        Dim cipherTextBytes As Byte() = Convert.FromBase64String(cipherText)
        Dim password As PasswordDeriveBytes = New PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, passwordIterations)
        Dim keyBytes As Byte() = password.GetBytes(keySize / 8)
        Dim symmetricKey As RijndaelManaged = New RijndaelManaged()
        symmetricKey.Mode = CipherMode.CBC
        Dim decryptor As ICryptoTransform = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes)
        Dim memoryStream As MemoryStream
        memoryStream = New MemoryStream(cipherTextBytes)
        Dim cryptoStream As CryptoStream = New CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read)
        Dim plainTextBytes As Byte()
        ReDim plainTextBytes(cipherTextBytes.Length)
        Dim decryptedByteCount As Integer
        decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length)
        memoryStream.Close()
        cryptoStream.Close()
        Dim plainText As String
        plainText = Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount)
        ;Decrypt = plainText
    End Function

Ответить

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


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #4 Добавлено: 10.05.08 03:31
во как, для черных админов тут Base64 - уже криптография :)
Также любопытно, как ТС читал MSDN, что ничего не уразумел...

http://msdn.microsoft.com/en-us/library/system.security.cryptography.aspx

Все доступно, понятно, и с примерами... Осталось только выбрать алгоритм, т.е. нужный класс.

Ответить

Номер ответа: 5
Автор ответа:
 BUMM ®



Вопросов: 8
Ответов: 482
 Профиль | | #5 Добавлено: 10.05.08 05:00
во как, для черных админов тут Base64 - уже криптография :)

человеку нада чтоб ужо всё готово было... )))

Ответить

Номер ответа: 6
Автор ответа:
 Алексей



black  admin

ICQ: 261779681 

Вопросов: 87
Ответов: 633
 Web-сайт: aleksey.nemiro.ru
 Профиль | | #6
Добавлено: 10.05.08 05:07
во как, для черных админов тут Base64 - уже криптография :)

в линках нет ничего Base64 ;)
для Base64 ключевые слова "строка" и "TextBox".

вот еще по теме:
http://kbyte.ru/Forum/Show.aspx?id=2813
http://kbyte.ru/Unicode/ShowGroup.aspx?id=50
http://kbyte.ru/Code/Show.aspx?id=116

Ответить

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



Вопросов: 18
Ответов: 37
 Профиль | | #7 Добавлено: 10.05.08 17:16
Пасиб, вот теперь всё уразумел! :) Собственно хотелось сделать с пом. крипто: БД Access нужен пароль не длиннее 20 символов. А ключ и пароль содержит по 42 символа. Действительно, закрутить 50 символов в шифрованый пароль в 20 символов с помощью стандартных средств криптографии невозможно :( Буду смотреть "самодельные" алгоритмы.

Ответить

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


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #8 Добавлено: 10.05.08 17:44
Почитай про хеши что-ли :\
Или обреж ключ и пароль до 10 символов...

Ответить

Номер ответа: 9
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #9
Добавлено: 11.05.08 23:06
20 символов хэш, будем считать не unicode. 160 бит это SHA-1, но у него нашли багу для нахождения коллизий. Остальные длиннее 160 бит. Придеца срезать знаки. Или самописный хэш юзай, но это будет ппц дыряво. Да и какой смысл в крипте, если ты занимаешься не проверкой ключа, а генерацией, а проверяют встроенные средства Access. Или я чет не понимаю и ты проверку реализуешь сам?

Ответить

Номер ответа: 10
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #10
Добавлено: 12.05.08 02:28
Я думаю, что баги в SHA-1 и MD5 настолько специфичны, что в обычных программах их можно использовать без всяких сомнений. А уж их пару и подавно. Это не относится к CRC32, с которым можно делать все, что угодно.

Ответить

Страница: 1 |

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



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