Лучший отвечающий
как зашифровать строку из паролем в access на С#

Вопрос
-
Здравствуйте подскажите, как зашифровать и дешифровать отдельною строку в access???
P.S. Если можно пример кода!
Спасибо!
- Изменено Иван Лукашов 25 марта 2013 г. 14:57
24 марта 2013 г. 21:03
Ответы
-
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()
я не знаю как вы работает с бд поэтому более полный вариант написать неполучится, но так должно работать вполне корректно- Предложено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 26 марта 2013 г. 9:17
- Помечено в качестве ответа Иван Лукашов 28 марта 2013 г. 11:07
26 марта 2013 г. 5:38 -
UpdateDate(encript(txbx_Psw.Text),162); // обновит пароль
- Помечено в качестве ответа Иван Лукашов 28 марта 2013 г. 10:59
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 - расшифрованное сообщение }
- Помечено в качестве ответа Иван Лукашов 28 марта 2013 г. 10:59
- Снята пометка об ответе Иван Лукашов 28 марта 2013 г. 11:06
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()
я не знаю как вы работает с бд поэтому более полный вариант написать неполучится, но так должно работать вполне корректно- Предложено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 26 марта 2013 г. 9:17
- Помечено в качестве ответа Иван Лукашов 28 марта 2013 г. 11:07
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 г. 11:02
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); // обновит пароль
- Помечено в качестве ответа Иван Лукашов 28 марта 2013 г. 10:59
27 марта 2013 г. 15:07 -
UpdateDate(encript(txbx_Psw.Text),162); // обновит пароль
А сам запрос оставляем без изменении, я правильно понимаю??
И еще вопрос:
private string myPassword = "OpenSesame";// не нужно заменить"OpenSesame" на txbx_Pws.Text??
- Изменено Иван Лукашов 27 марта 2013 г. 15:40
27 марта 2013 г. 15:39 -
да сам запрос у вас работает его менять не нужно
myPassword это внутренний ключ для шифрования, вы можете поменять его на любой свой, с помощью его шифруются/дешифруются данные которые передаются в метод
27 марта 2013 г. 17:05 -
Пишите сюда, и вам постараются помочь28 марта 2013 г. 10:24