Страница: 1 |
Страница: 1 |
Вопрос: как зашифровать данные?
Добавлено: 13.07.08 15:42
Автор вопроса: Андрей | Web-сайт:
мне любым способом нужно зашифровать данные... юникодом, или MD5, единственный вопрос в реализации этого процесса.
а дело вот в чем: нужно много .txt файлов залить на сервер, и зашифровать, чтобы они были не доступны для свободного чтения, а читались только моей программой. так же желателен выбор шифрования с максимальной скоростью(время имеет значение), и в файле может быть до 2000 строк, столбцов не больше 30...
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #1
Добавлено: 13.07.08 17:25
С помощью юникода можно только выполнить кодирование строки в массив байтов и это не является шифрования
MD5 - это хеширование, процес необратимый.
' Ключ шифрования
'(тебе нужно сгенерировать для себя свой ключ длинной 32 байта.
Dim Key() As Byte = {167, 229, 22, 130, 127, 9, 141, 37, 207, 56, 197, 200, 54, 35, 249, 17, 194, 81, 122, 39, 122, 153, 10, 18, 43, 85, 161, 82, 146, 102, 59, 204}
Dim Rijndael As New System.Security.Cryptography.RijndaelManaged
Rijndael.Key = Key
Rijndael.GenerateIV()
Const BufSize As Integer = 1024 * 64
Using Source = New IO.FileStream("C:\1.html", FileMode.Open, FileAccess.Read)
Using Destination = New IO.FileStream("c:\1.enc", FileMode.Create, FileAccess.Write)
 estination.Write(Rijndael.IV, 0, Rijndael.IV.Length)
Using CS = New System.Security.Cryptography.CryptoStream(Destination, Rijndael.CreateEncryptor, Security.Cryptography.CryptoStreamMode.Write)
Dim Length As Integer
Dim Buffer(BufSize - 1) As Byte
Do
Length = Source.Read(Buffer, 0, BufSize)
CS.Write(Buffer, 0, Length)
Loop While Length = BufSize
End Using
End Using
End Using
End Sub
Sub Decrypt()
' Ключ шифрования
'(тебе нужно сгенерировать для себя свой ключ длинной 32 байта.
Dim Key() As Byte = {167, 229, 22, 130, 127, 9, 141, 37, 207, 56, 197, 200, 54, 35, 249, 17, 194, 81, 122, 39, 122, 153, 10, 18, 43, 85, 161, 82, 146, 102, 59, 204}
' Реализация алгоритма AES
Dim Rijndael As New System.Security.Cryptography.RijndaelManaged
Rijndael.Key = Key
Const BufSize As Integer = 1024 * 64
Using Source = New IO.FileStream("c:\1.enc", FileMode.Open, FileAccess.Read)
Dim IV(Rijndael.IV.Length - 1) As Byte
Source.Read(IV, 0, Rijndael.IV.Length)
Rijndael.IV = IV
Using Destination = New IO.FileStream("c:\out.html", FileMode.Create, FileAccess.Write)
Using CS = New System.Security.Cryptography.CryptoStream(Destination, Rijndael.CreateDecryptor, Security.Cryptography.CryptoStreamMode.Write)
Dim Length As Integer
Dim Buffer(BufSize - 1) As Byte
Do
Length = Source.Read(Buffer, 0, BufSize)
CS.Write(Buffer, 0, Length)
Loop While Length = BufSize
End Using
End Using
End Using
End Sub
Если что непонятно - спрашивай
Номер ответа: 2
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #2
Добавлено: 13.07.08 17:35
Не беспокойся - наверное процентов 90 времени будет идти чтения файла с диска и запись шифрованых данных обратно на диск, шифрование тут никакого тормоза не добавит
Номер ответа: 3
Автор ответа:
Андрей
ICQ: 353336595
Вопросов: 11
Ответов: 16
Web-сайт:
Профиль | | #3
Добавлено: 13.07.08 20:00
товарищ, а этот код точно под VB6.0? тут с синтаксисом проблемы. или, может, объявить еще что-то надо?
Номер ответа: 4
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #4
Добавлено: 13.07.08 20:12
Нет, это точно не под VB 6.0. Это под VB .NET.
Под VB6 нужно использовать CryptoAPI, примеров у меня нет к сожалению.
Поищи в инете примеры по RIJNDAEL/AES
Номер ответа: 5
Автор ответа:
Андрей
ICQ: 353336595
Вопросов: 11
Ответов: 16
Web-сайт:
Профиль | | #5
Добавлено: 13.07.08 20:24
мда... а я уже прям навострился вбивать эти процедуры в свою программу))) спасибо и на этом)))
так, а может с юникодом проще будет?
Номер ответа: 6
Автор ответа:
gvozd
Разработчик Offline Client
Вопросов: 164
Ответов: 1317
Web-сайт:
Профиль | | #6
Добавлено: 13.07.08 20:34
Steel Brand, может расскажешь товарищу у методе пана __Pavel__? Может эта разработка найдет своих поклонников уже сейчас?
Номер ответа: 7
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #7
Добавлено: 13.07.08 23:32
на скорую руку можно и так:
Dim t As String, t2 As String, i As Long, j As Long, c() As String, done As Boolean
t = "": done = False
ReDim c(Len(key) - 1)
For i = 0 To UBound(c)
c(i) = Mid(key, i + 1, 1)
Next i
For i = 0 To UBound(c) - 1
For j = i + 1 To UBound(c)
If c(i) = c(j) Then
MsgBox "wrong key"
Encrypt = ""
Exit Function
End If
Next j
Next i
For i = 1 To Len(text)
t2 = Mid(text, i, 1)
For j = 0 To UBound(c)
If c(j) = t2 Then
If j <> UBound(c) Then
t = t + c(j + 1)
Else
t = t + c(0)
End If
done = True
End If
Next j
If Not done Then t = t + t2
done = False
Next i
Encrypt = t
End Function
Private Function Decrypt(text As String, key As String) As String
Dim t As String, t2 As String, i As Long, j As Long, c() As String, done As Boolean
t = "": done = False
ReDim c(Len(key) - 1)
For i = 0 To UBound(c)
c(i) = Mid(key, i + 1, 1)
Next i
For i = 0 To UBound(c) - 1
For j = i + 1 To UBound(c)
If c(i) = c(j) Then
MsgBox "wrong key"
 ecrypt = ""
Exit Function
End If
Next j
Next i
For i = 1 To Len(text)
t2 = Mid(text, i, 1)
For j = 0 To UBound(c)
If c(j) = t2 Then
If j <> 0 Then
t = t + c(j - 1)
Else
t = t + c(UBound(c))
End If
done = True
End If
Next j
If Not done Then t = t + t2
done = False
Next i
Decrypt = t
End Function
Номер ответа: 8
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #8
Добавлено: 13.07.08 23:35
ЗЫ
В ключе не должно быть повторяющихся символов
Номер ответа: 9
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #9
Добавлено: 14.07.08 02:14
Кстати, AES - это не алгоритм, а стандарт. Алгоритм обеспечивающий этот стандарт, как раз RIJNDAEL.
2 Андрей
Ты искать то сам пробовал, перед тем как задать вопрос на форуме? Напиши в любой поисковик, например "VB6 RIJNDAEL", или "VB6 DES"...
Номер ответа: 10
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #10
Добавлено: 14.07.08 04:00
Я думаю использование кода пана __Pavel__ будет эффективно только на суперкомпьютерах NASA
... поскипано ...
не советую так делать, безопасность этого метода под большим вопросом.
Согласен