Страница: 1 |
Страница: 1 |
Вопрос: Вопрос по криптографии
Добавлено: 23.04.08 01:46
Автор вопроса: Abriel
Перечитал MSDN, так и не уразумел... :( Каким образом зашифровать текст в TextBoxе на VB2005, используя средства криптографии .NET и задавая собственный (предопределенный) текстовый ключь, в итоге получая не байтовый массив, а обычную зашифрованную строку??? Разумеется, что также нужно сделать декрипт - используя предопределенный ранее ключь... Будьте-добры, может пример кто покажет?
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
Алексей
black admin
ICQ: 261779681
Вопросов: 87
Ответов: 633
Web-сайт:
Профиль | | #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)
 ecrypt = 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
человеку нада чтоб ужо всё готово было... )))
Номер ответа: 6
Автор ответа:
Алексей
black admin
ICQ: 261779681
Вопросов: 87
Ответов: 633
Web-сайт:
Профиль | | #6
Добавлено: 10.05.08 05:07
в линках нет ничего 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-сайт:
Профиль | | #9
Добавлено: 11.05.08 23:06
20 символов хэш, будем считать не unicode. 160 бит это SHA-1, но у него нашли багу для нахождения коллизий. Остальные длиннее 160 бит. Придеца срезать знаки. Или самописный хэш юзай, но это будет ппц дыряво. Да и какой смысл в крипте, если ты занимаешься не проверкой ключа, а генерацией, а проверяют встроенные средства Access. Или я чет не понимаю и ты проверку реализуешь сам?
Номер ответа: 10
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #10
Добавлено: 12.05.08 02:28
Я думаю, что баги в SHA-1 и MD5 настолько специфичны, что в обычных программах их можно использовать без всяких сомнений. А уж их пару и подавно. Это не относится к CRC32, с которым можно делать все, что угодно.