Страница: 1 | 
		
		 
			   
			 
			 
			 
			 Страница: 1 | 
 
			
 
  
		
     
  
    
Вопрос: как зашифровать данные?
     
    
Добавлено: 13.07.08 15:42
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
     Андрей | Web-сайт: vstu.ucoz.ru/ | ICQ: 353336595
 Андрей | Web-сайт: vstu.ucoz.ru/ | ICQ: 353336595 
      
       
  
мне любым способом нужно зашифровать данные... юникодом, или MD5, единственный вопрос в реализации этого процесса.
 
    
а дело вот в чем: нужно много .txt файлов залить на сервер, и зашифровать, чтобы они были не доступны для свободного чтения, а читались только моей программой. так же желателен выбор шифрования с максимальной скоростью(время имеет значение), и в файле может быть до 2000 строк, столбцов не больше 30... 
				
		
		
					 
			
				 
  
		
     
  
    
Ответы
     
    
Всего ответов: 10
     
      
  
		
	  
			 
	
		 
    
       
    
Номер ответа: 1 
      
Автор ответа: Artyom
 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)
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
 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
 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
 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 = ""
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
 HACKER








 
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
      
 Профиль |  | #9
       
Добавлено:  14.07.08 02:14
       
    
       
  
Кстати, AES - это не алгоритм, а стандарт. Алгоритм обеспечивающий этот стандарт, как раз RIJNDAEL.
 
    
2 Андрей
Ты искать то сам пробовал, перед тем как задать вопрос на форуме? Напиши в любой поисковик, например "VB6 RIJNDAEL", или "VB6 DES"...
		
	  
			 
	
		 
    
       
    
Номер ответа: 10 
      
Автор ответа: Artyom
 Artyom







Разработчик
Вопросов: 130
Ответов: 6602
      
 Профиль |  | #10
       
Добавлено:  14.07.08 04:00
       
    
       
  
 
    
Я думаю использование кода пана __Pavel__ будет эффективно только на суперкомпьютерах NASA
... поскипано ...
не советую так делать, безопасность этого метода под большим вопросом.
Согласен