none
как зашифровать строку из паролем в access на С# RRS feed

Ответы

  • private void moveBytes(Stream source, Stream dest)
    {
    	byte[] bytes = new byte[2048];
    	var count = source.Read(bytes, 0, bytes.Length);
    	while (0 != count)
    	{
    		dest.Write(bytes, 0, count);
    		count = source.Read(bytes, 0, bytes.Length);
    	}
    }
    
    private string myPassword = "OpenSesame"; 
    private byte[] cipherText; 
    private byte[] salt = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1, 0x0 }; 
    
    private string encript(string data)
    {
    	var key = new Rfc2898DeriveBytes(myPassword, salt); 
    	var algorithm = new RijndaelManaged(); 
    	algorithm.Key = key.GetBytes(16); 
    	algorithm.IV = key.GetBytes(16); 
    	var sourceBytes = new System.Text.UnicodeEncoding().GetBytes(data);//myData строка которцю нужно сохранить 
    	using (var sourceStream = new MemoryStream(sourceBytes)) 
    	using (var destinationStream = new MemoryStream()) 
    	using (var crypto = new CryptoStream(sourceStream, algorithm.CreateEncryptor(), CryptoStreamMode.Read)) 
    	{ 
    		moveBytes(crypto, destinationStream); cipherText = destinationStream.ToArray(); 
    	} 
    	return Convert.ToBase64String(cipherText) // показывает результат шифрования
    }
    
    private decript(string data)
    {
    	string decryptedMessage="";
    	var key = new Rfc2898DeriveBytes(myPassword, salt);
    	var algorithm = new RijndaelManaged();
    	algorithm.Key = key.GetBytes(16);
    	algorithm.IV = key.GetBytes(16);
    	var sourceBytes = new System.Text.UnicodeEncoding().GetBytes(data);
    	using (var sourceStream = new MemoryStream(sourceBytes))
    	using (var destinationStream = new MemoryStream())
    	using (var crypto = new CryptoStream(sourceStream,algorithm.CreateDecryptor(),CryptoStreamMode.Read))
    	{
    		moveBytes(crypto, destinationStream);
    		var decryptedBytes = destinationStream.ToArray();
    		decryptedMessage = new UnicodeEncoding().GetString(decryptedBytes);
    	//decryptedMessage - расшифрованное сообщение
    	}
    	return decryptedMessage;
    }

    когда вы работаете с БД и считаваете строку с паролем то что бы получить пароль, вам надо вызвать decript()
    когда вы захотите записать пароль в бд используете encript()
    я не знаю как вы работает с бд поэтому более полный вариант написать неполучится, но так должно работать вполне корректно
    26 марта 2013 г. 5:38
  • UpdateDate(encript(txbx_Psw.Text),162); // обновит пароль
    27 марта 2013 г. 15:07

Все ответы

  • Если вам нужно зашифровать именно определенные строки то можно отобрать эти строки, зашифровать их и сохранить обратно в БД, а при доступе расшифровывать их. Так же вам нужно определить насколько устойчивым должно быть шифрование, есть несколько вариантов симметричные алгоритмы, асимметричные

    Вот пример шифрования симметричным алгоритмом

    private void moveBytes(Stream source, Stream dest)
    {
    byte[] bytes = new byte[2048];
    var count = source.Read(bytes, 0, bytes.Length);
    while (0 != count)
    {
    dest.Write(bytes, 0, count);
    count = source.Read(bytes, 0, bytes.Length);
    }
    }

    private string myPassword = "OpenSesame"; private byte[] cipherText; private byte[] salt = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1, 0x0 }; var key = new Rfc2898DeriveBytes(myPassword, salt); var algorithm = new RijndaelManaged(); algorithm.Key = key.GetBytes(16); algorithm.IV = key.GetBytes(16); var sourceBytes = new System.Text.UnicodeEncoding().GetBytes(myData);//myData строка которцю нужно сохранить using (var sourceStream = new MemoryStream(sourceBytes)) using (var destinationStream = new MemoryStream()) using (var crypto = new CryptoStream(sourceStream, algorithm.CreateEncryptor(), CryptoStreamMode.Read)) { moveBytes(crypto, destinationStream); cipherText = destinationStream.ToArray(); } Convert.ToBase64String(cipherText) // показывает результат шифрования


    вот пример расшифровки

    var key = new Rfc2898DeriveBytes(myPassword, salt);
    var algorithm = new RijndaelManaged();
    algorithm.Key = key.GetBytes(16);
    algorithm.IV = key.GetBytes(16);
    using (var sourceStream = new MemoryStream(cipherText))
    using (var destinationStream = new MemoryStream())
    using (var crypto = new CryptoStream(sourceStream,
    algorithm.CreateDecryptor(),
    CryptoStreamMode.Read))
    {
    moveBytes(crypto, destinationStream);
    var decryptedBytes = destinationStream.ToArray();
    var decryptedMessage = new UnicodeEncoding().GetString(
    decryptedBytes);
    //decryptedMessage - расшифрованное сообщение
    }

    25 марта 2013 г. 16:11
  • Если вам нужно зашифровать именно определенные строки то можно отобрать эти строки, зашифровать их и сохранить обратно в БД, а при доступе расшифровывать их. Так же вам нужно определить насколько устойчивым должно быть шифрование, есть несколько вариантов симметричные алгоритмы, асимметричные

    Вот пример шифрования симметричным алгоритмом

    private void moveBytes(Stream source, Stream dest)
    {
    byte[] bytes = new byte[2048];
    var count = source.Read(bytes, 0, bytes.Length);
    while (0 != count)
    {
    dest.Write(bytes, 0, count);
    count = source.Read(bytes, 0, bytes.Length);
    }
    }

    private string myPassword = "OpenSesame"; private byte[] cipherText; private byte[] salt = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1, 0x0 }; var key = new Rfc2898DeriveBytes(myPassword, salt); var algorithm = new RijndaelManaged(); algorithm.Key = key.GetBytes(16); algorithm.IV = key.GetBytes(16); var sourceBytes = new System.Text.UnicodeEncoding().GetBytes(myData);//myData строка которцю нужно сохранить using (var sourceStream = new MemoryStream(sourceBytes)) using (var destinationStream = new MemoryStream()) using (var crypto = new CryptoStream(sourceStream, algorithm.CreateEncryptor(), CryptoStreamMode.Read)) { moveBytes(crypto, destinationStream); cipherText = destinationStream.ToArray(); } Convert.ToBase64String(cipherText) // показывает результат шифрования


    вот пример расшифровки

    var key = new Rfc2898DeriveBytes(myPassword, salt);
    var algorithm = new RijndaelManaged();
    algorithm.Key = key.GetBytes(16);
    algorithm.IV = key.GetBytes(16);
    using (var sourceStream = new MemoryStream(cipherText))
    using (var destinationStream = new MemoryStream())
    using (var crypto = new CryptoStream(sourceStream,
    algorithm.CreateDecryptor(),
    CryptoStreamMode.Read))
    {
    moveBytes(crypto, destinationStream);
    var decryptedBytes = destinationStream.ToArray();
    var decryptedMessage = new UnicodeEncoding().GetString(
    decryptedBytes);
    //decryptedMessage - расшифрованное сообщение
    }

     private void moveBytes(Stream source, Stream dest)// что означаю эти параметры??

    И как отобразить моем случай данною строку которая показана на скриншоте??

    25 марта 2013 г. 18:57
  • Если вам нужно шифровать все строку то придется каждую ячейка шифровать по отдельности, а так обычно шифруют только пароли, хотя чаще хранят hesh-ы этих паролей а сами пароли не хранят
    25 марта 2013 г. 19:23
  • Если вам нужно шифровать все строку то придется каждую ячейка шифровать по отдельности, а так обычно шифруют только пароли, хотя чаще хранят hesh-ы этих паролей а сами пароли не хранят

    Простите меня, я с этим сталкиваюсь первый раз можите показать пример на моем скриншоте...как на пример закешировать пароль и передать его в базу данных. Спасибо!

    P.S. ну пароли у меня будет хранится вот в этой стобце  value

    25 марта 2013 г. 19:41
  • private void moveBytes(Stream source, Stream dest)
    {
    	byte[] bytes = new byte[2048];
    	var count = source.Read(bytes, 0, bytes.Length);
    	while (0 != count)
    	{
    		dest.Write(bytes, 0, count);
    		count = source.Read(bytes, 0, bytes.Length);
    	}
    }
    
    private string myPassword = "OpenSesame"; 
    private byte[] cipherText; 
    private byte[] salt = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1, 0x0 }; 
    
    private string encript(string data)
    {
    	var key = new Rfc2898DeriveBytes(myPassword, salt); 
    	var algorithm = new RijndaelManaged(); 
    	algorithm.Key = key.GetBytes(16); 
    	algorithm.IV = key.GetBytes(16); 
    	var sourceBytes = new System.Text.UnicodeEncoding().GetBytes(data);//myData строка которцю нужно сохранить 
    	using (var sourceStream = new MemoryStream(sourceBytes)) 
    	using (var destinationStream = new MemoryStream()) 
    	using (var crypto = new CryptoStream(sourceStream, algorithm.CreateEncryptor(), CryptoStreamMode.Read)) 
    	{ 
    		moveBytes(crypto, destinationStream); cipherText = destinationStream.ToArray(); 
    	} 
    	return Convert.ToBase64String(cipherText) // показывает результат шифрования
    }
    
    private decript(string data)
    {
    	string decryptedMessage="";
    	var key = new Rfc2898DeriveBytes(myPassword, salt);
    	var algorithm = new RijndaelManaged();
    	algorithm.Key = key.GetBytes(16);
    	algorithm.IV = key.GetBytes(16);
    	var sourceBytes = new System.Text.UnicodeEncoding().GetBytes(data);
    	using (var sourceStream = new MemoryStream(sourceBytes))
    	using (var destinationStream = new MemoryStream())
    	using (var crypto = new CryptoStream(sourceStream,algorithm.CreateDecryptor(),CryptoStreamMode.Read))
    	{
    		moveBytes(crypto, destinationStream);
    		var decryptedBytes = destinationStream.ToArray();
    		decryptedMessage = new UnicodeEncoding().GetString(decryptedBytes);
    	//decryptedMessage - расшифрованное сообщение
    	}
    	return decryptedMessage;
    }

    когда вы работаете с БД и считаваете строку с паролем то что бы получить пароль, вам надо вызвать decript()
    когда вы захотите записать пароль в бд используете encript()
    я не знаю как вы работает с бд поэтому более полный вариант написать неполучится, но так должно работать вполне корректно
    26 марта 2013 г. 5:38
  • private void moveBytes(Stream source, Stream dest)
    {
    	byte[] bytes = new byte[2048];
    	var count = source.Read(bytes, 0, bytes.Length);
    	while (0 != count)
    	{
    		dest.Write(bytes, 0, count);
    		count = source.Read(bytes, 0, bytes.Length);
    	}
    }
    
    private string myPassword = "OpenSesame"; 
    private byte[] cipherText; 
    private byte[] salt = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1, 0x0 }; 
    
    private string encript(string data)
    {
    	var key = new Rfc2898DeriveBytes(myPassword, salt); 
    	var algorithm = new RijndaelManaged(); 
    	algorithm.Key = key.GetBytes(16); 
    	algorithm.IV = key.GetBytes(16); 
    	var sourceBytes = new System.Text.UnicodeEncoding().GetBytes(data);//myData строка которцю нужно сохранить 
    	using (var sourceStream = new MemoryStream(sourceBytes)) 
    	using (var destinationStream = new MemoryStream()) 
    	using (var crypto = new CryptoStream(sourceStream, algorithm.CreateEncryptor(), CryptoStreamMode.Read)) 
    	{ 
    		moveBytes(crypto, destinationStream); cipherText = destinationStream.ToArray(); 
    	} 
    	return Convert.ToBase64String(cipherText) // показывает результат шифрования
    }
    
    private decript(string data)
    {
    	string decryptedMessage="";
    	var key = new Rfc2898DeriveBytes(myPassword, salt);
    	var algorithm = new RijndaelManaged();
    	algorithm.Key = key.GetBytes(16);
    	algorithm.IV = key.GetBytes(16);
    	var sourceBytes = new System.Text.UnicodeEncoding().GetBytes(data);
    	using (var sourceStream = new MemoryStream(sourceBytes))
    	using (var destinationStream = new MemoryStream())
    	using (var crypto = new CryptoStream(sourceStream,algorithm.CreateDecryptor(),CryptoStreamMode.Read))
    	{
    		moveBytes(crypto, destinationStream);
    		var decryptedBytes = destinationStream.ToArray();
    		decryptedMessage = new UnicodeEncoding().GetString(decryptedBytes);
    	//decryptedMessage - расшифрованное сообщение
    	}
    	return decryptedMessage;
    }

    когда вы работаете с БД и считаваете строку с паролем то что бы получить пароль, вам надо вызвать decript()
    когда вы захотите записать пароль в бд используете encript()
    я не знаю как вы работает с бд поэтому более полный вариант написать неполучится, но так должно работать вполне корректно
    Пишу я все руками, если вы это имели виду, когда говорили  (я не знаю как вы работает с бд). 
     P.S. Я правильно понемаю, когда пользователь водит в из textbox пароль , мы его шефруем, потот из помощью запроса используем  encript(), записываем бд??

    26 марта 2013 г. 10:56
  • нет, перед сохранением используйте encript(), что бы в запросе передавался уже зашифрованный пароль, а когда достаете значение из бд используйте decript() что бы получить расшифрованный пароль
    26 марта 2013 г. 11:18
  • нет, перед сохранением используйте encript(), что бы в запросе передавался уже зашифрованный пароль, а когда достаете значение из бд используйте decript() что бы получить расшифрованный пароль
    А как мне в запрос тогда передать??
    26 марта 2013 г. 13:04
  • покажите код которым вы добовляете зипись с паролем в бд
    26 марта 2013 г. 13:07
  • покажите код которым вы добовляете зипись с паролем в бд

    Я прошу извинения за мою назойливость, я задавал вопрос Подскажите как создать правильно запрос к бд Access C#, Спасибо Вам за ответ, подскажите как мне encript() в запрос добавить и вызвать??


    27 марта 2013 г. 14:51
  • UpdateDate(encript(txbx_Psw.Text),162); // обновит пароль
    27 марта 2013 г. 15:07
  • UpdateDate(encript(txbx_Psw.Text),162); // обновит пароль

    А сам запрос оставляем без изменении, я правильно понимаю??

    И еще вопрос: 

    private string myPassword = "OpenSesame";// не нужно заменить"OpenSesame" на txbx_Pws.Text??

    27 марта 2013 г. 15:39
  • да сам запрос у вас работает его менять не нужно

    myPassword это внутренний ключ для шифрования, вы можете поменять его на любой свой, с помощью его шифруются/дешифруются данные которые передаются в метод

    27 марта 2013 г. 17:05
  • Пишите сюда, и вам постараются помочь
    28 марта 2013 г. 10:24