Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Проблемы с криптографией
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Подскажите, как решить следующую проблему: хотелось бы хранить пароли в БД в зашифрованном виде. Пытался использовать для этого пространство имен System.Security.Cryptography, но дело в том, что все интерфейсы-шифраторы работают с потоками, и все примеры, которые удалось найти, были ориентированы на файловые потоки с созданием временного файла. Мне бы не хотелось использовать эту технологию. Пробовал использовать поток MemoryStream: ... MemoryStream mstr=new MemoryStream(b); UnicodeEncoding myEnc=new UnicodeEncoding(); b=myEnc.GetBytes(password); DESCryptoServiceProvider prov=new DESCryptoServiceProvider(); ICryptoTransform enc=prov.CreateEncryptor(key,IV); CryptoStream crt=new CryptoStream(mstr,enc,CryptoStreamMode.Write); crt.Write(b,0,b.Length); ... получил следующую ошибку:MemoryStream is not expandableесли обернуть MemoryStream в поток StreamWriter MemoryStream mstr=new MemoryStream(b); StreamWriter mstrw=new StreamWriter(mstr); UnicodeEncoding myEnc=new UnicodeEncoding(); b=myEnc.GetBytes(password); DESCryptoServiceProvider prov=new DESCryptoServiceProvider(); ICryptoTransform enc=prov.CreateEncryptor(key,IV); CryptoStream crt=new CryptoStream(mstrw,enc,CryptoStreamMode.Write); crt.Write(b,0,b.Length); ошибка следующая: cannot convert from 'System.IO.StreamWriter' to 'System.IO.Stream' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2006, 11:30 |
|
||
|
Проблемы с криптографией
|
|||
|---|---|---|---|
|
#18+
>Yaroslave, 22.09.06 12:30 >Проблемы с криптографией Посмотри здесь: http://www.gotdotnet.ru/LearnDotNet/NETFramework/223738.aspx С уважением, Владимир. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2006, 19:48 |
|
||
|
Проблемы с криптографией
|
|||
|---|---|---|---|
|
#18+
>Посмотри здесь: http://www.gotdotnet.ru/LearnDotNet/NETFramework/223738.aspx С уважением, Владимир. Хорошая статья, но дело в том. что мне не нужно строить мощную систему безопасности, а просто немного защитить базу. Требуется сгенерировать ключ шифрования по паролю или по логину, вектор инициализации будет прошит в программу. Шифровать планирую по алгоритму DES. Весь вопрос в том, где временно сохранить зашированную строку, поскольку работать с файловыми потоками я не хочу, а другие, кроме MemoryStream криптометодами .NET к сожалению не поддерживаются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2006, 13:05 |
|
||
|
Проблемы с криптографией
|
|||
|---|---|---|---|
|
#18+
>Yaroslave, 23.09.06 14:05 > ... где временно сохранить зашированную строку ... Что-то не понимаю, преобразование byte[] <--> MemoryStream существует: byte[] bm=new byte[100]; MemoryStream ms=new MemoryStream(bm); int n=ms.Read(bm,0,100); где хранить шифрованную byte[], это вопрос конечно интересный. DES или 3DES или ..., тебе решать. Вот шифрующие методы: //-- TDES крипто //-- вход: xbb (вектор для шифрования) //-- выход: xbb (шифрованный вектор) //========================================================= private bool TDESEncrypt() { if(xbb.Length==0) return true; CryptoStream cs=null; MemoryStream ms=null; try { byte[]bb=new Byte[32]; byte[]key=new byte[24]; byte[]iv=new byte[8]; new RNGCryptoServiceProvider().GetNonZeroBytes(bb); //-- байтовый вектор bb содержит хорошо рандомизированную величину for(int i=0;i<8;i++) TDESIV[i]=bb[i]; TDESKey.CopyTo(key,0); TDESIV.CopyTo(iv,0); ms=new MemoryStream(xbb.Length+8); cs=new CryptoStream(ms,tdes.CreateEncryptor(key,iv),CryptoStreamMode.Write); cs.Write(xbb,0,xbb.Length); cs.FlushFinalBlock(); xbb=ms.ToArray(); cs.Close(); ms.Close(); return true; } catch { if(cs!=null) cs.Clear(); if(ms!=null) ms.Close(); return false; } } //-- TDES декрипто //-- фрагмент xms содержит шифрованный байтовый вектор, указатель стоит на начале фрагмента //-- ln <-- длина фрагмента //-- выход; //-- xms <-- Info //-- xbbN <-- Размер Info //=============================================================================== private bool TDESDecrypt(int ln) { CryptoStream cs=null; try { byte[]key=new Byte[24]; byte[]iv=new Byte[8]; byte[]xbb=new Byte[ln]; TDESKey.CopyTo(key,0); TDESIV.CopyTo(iv,0); cs=new CryptoStream(xms,tdes.CreateDecryptor(key,iv),CryptoStreamMode.Read); xbbN=(int)cs.Read(xbb,0,ln); cs.Close(); xms.Close(); xms=new MemoryStream(xbb,0,xbbN); return true; } catch { if(cs!=null) cs.Clear(); xms.Close(); return false; } } С уважением, Владимир. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2006, 18:56 |
|
||
|
Проблемы с криптографией
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Yaroslave, Вы писали: Y>Подскажите, как решить следующую проблему: хотелось бы хранить пароли в БД в зашифрованном виде. http://rsdn.ru/?article/files/Classes/passwd.xml ?... << RSDN@Home 1.2.0 alpha rev. 654>> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2006, 19:17 |
|
||
|
|

start [/forum/topic.php?fid=18&fpage=872&tid=1389308]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
28ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 364ms |

| 0 / 0 |
