powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Проблемы с криптографией
5 сообщений из 5, страница 1 из 1
Проблемы с криптографией
    #34005478
Yaroslave
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Подскажите, как решить следующую проблему: хотелось бы хранить пароли в БД в зашифрованном виде. Пытался использовать для этого пространство имен 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'
...
Рейтинг: 0 / 0
Проблемы с криптографией
    #34007325
Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Yaroslave, 22.09.06 12:30
>Проблемы с криптографией

Посмотри здесь: http://www.gotdotnet.ru/LearnDotNet/NETFramework/223738.aspx

С уважением, Владимир.
...
Рейтинг: 0 / 0
Проблемы с криптографией
    #34007726
Yaroslave
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Посмотри здесь: http://www.gotdotnet.ru/LearnDotNet/NETFramework/223738.aspx

С уважением, Владимир.

Хорошая статья, но дело в том. что мне не нужно строить мощную систему безопасности, а просто немного защитить базу. Требуется сгенерировать ключ шифрования по паролю или по логину, вектор инициализации будет прошит в программу. Шифровать планирую по алгоритму DES. Весь вопрос в том, где временно сохранить зашированную строку, поскольку работать с файловыми потоками я не хочу, а другие, кроме MemoryStream криптометодами .NET к сожалению не поддерживаются
...
Рейтинг: 0 / 0
Проблемы с криптографией
    #34007921
Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>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;
   }
  }

С уважением, Владимир.
...
Рейтинг: 0 / 0
Проблемы с криптографией
    #34007933
Odi$$ey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, Yaroslave, Вы писали:

Y>Подскажите, как решить следующую проблему: хотелось бы хранить пароли в БД в зашифрованном виде.

http://rsdn.ru/?article/files/Classes/passwd.xml ?... << RSDN@Home 1.2.0 alpha rev. 654>>
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Проблемы с криптографией
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]