Страница: 1 | 
		
		 
			   
			 
			 
			 
			 Страница: 1 | 
 
			
 
  
		
     
  
    
Вопрос: Помогите с шифрованием!
     
    
Добавлено: 15.01.13 01:54
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
    
 ЛеШий
      
       
  
Помогите, пожалуйста, разобраться:
 
    
мне необходимо зашифровать текстовую строку; использую этот метод: http://www.cyberforum.ru/post818053.html
В первом случае, когда я записываю зашифрованный результат в текстовый файл, все работает без проблем. Во втором случае, когда мне надо взять строку, введенную пользователем, зашифровать ее, и полученный результат присвоить строковой переменной, шифрование проходит без проблем, а вот расшифровка не получается:
        Dim Key As Byte() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
        Dim IV As Byte() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
        '===========================================================
        Dim RMCrypto1 As New Security.Cryptography.RijndaelManaged
        Dim ms1 As New System.IO.MemoryStream
        Dim CryptStream1 As New Security.Cryptography.CryptoStream(ms1, RMCrypto1.CreateEncryptor(Key, IV), _
                                                                   Security.Cryptography.CryptoStreamMode.Write)
        Dim SWriter1 As New IO.StreamWriter(CryptStream1)
        Dim s As String = ""
        SWriter1.WriteLine(TextBox1.Text)
        SWriter1.Close()
        CryptStream1.Close()
        TextBox2.Text = System.Text.Encoding.UTF8.GetString(ms1.ToArray())
        '===========================================================
        Dim RMCrypto2 As New Security.Cryptography.RijndaelManaged
        Dim ms2 As New System.IO.MemoryStream
        Dim enc As New System.Text.UTF8Encoding
        Dim arrBytData() As Byte = enc.GetBytes(TextBox2.Text)
        ms2.Write(arrBytData, 0, arrBytData.Length)
        Dim CryptStream2 As New Security.Cryptography.CryptoStream(ms2, RMCrypto2.CreateDecryptor(Key, IV), _
                                                                   Security.Cryptography.CryptoStreamMode.Read)
        Dim SReader2 As New IO.StreamReader(CryptStream2)
        TextBox3.Text = SReader2.ReadToEnd()
        SReader2.Close()
        ms2.Close()
        CryptStream2.Close()
На строке "TextBox3.Text = SReader2.ReadToEnd()" возникает ошибка "Индекс находился вне границ массива."...
				
		
		
					 
			
				 
  
		
     
  
    
Ответы
     
    
Всего ответов: 3
     
      
  
		
	  
			 
	
		 
    
       
    
Номер ответа: 1 
      
Автор ответа:
 ---Fix---
![]()
![]()
![]()
![]()
ICQ: 348680795 
Вопросов: 12
Ответов: 33
      
 Профиль |  | #1
       
Добавлено:  23.01.13 08:21
       
    
       
  
Может я не прав, не работал с этим классом, но скорей всего проблема в том, что при преобразовании массива  в строку:
 
    
теряются байты, т.к. строки не хранят "неуправляемые" символы. Попробуйте при расшифровке сразу передать ms1. Если получится, значит в этом и проблема.
		
	  
			 
	
		 
    
       
    
Номер ответа: 2 
      
Автор ответа:
 ЛеШий
![]()
![]()
![]()
![]()
![]()
Вопросов: 21
Ответов: 41
      
 Профиль |  | #2
       
Добавлено:  04.02.13 00:16
       
    
       
  
Нашел пример, решающий мою задачу:
 
    
http://msdn.microsoft.com/ru-ru/library/system.security.cryptography.cryptostream.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2
		
	  
			 
	
		 
    
       
    
Номер ответа: 3 
      
Автор ответа:
 Artyom
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Разработчик
Вопросов: 130
Ответов: 6602
      
 Профиль |  | #3
       
Добавлено:  16.02.13 02:42
       
    
       
  
Вектор инициализации нужно каждый раз генерировать случайно.