Хеширование пароля в приложении C # для Windows, если отсутствует проверка подлинности FormsAuthentication в ASP.NET? - PullRequest
8 голосов
/ 17 октября 2008

Моему приложению Win form, похоже, не нравится FormsAuthentication, я совершенно новичок в хешировании, поэтому любая помощь для преобразования этого будет очень кстати Спасибо.

//Write hash
protected TextBox tbPassword;
protected Literal liHashedPassword;

{
  string strHashedPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(tbPassword.Text, "sha1");
  liHashedPassword.Text = "Hashed Password is: " + strHashedPassword;    
}

//read hash
string strUserInputtedHashedPassword = FormsAuthentication.HashPasswordForStoringInConfigFile( tbPassword.Text, "sha1");
if(strUserInputtedHashedPassword == GetUsersHashedPasswordUsingUserName(tbUserName.Text))
{
  // sign-in successful
}
else
{
  // sign-in failed
}

Ответы [ 6 ]

22 голосов
/ 17 октября 2008
using System.Security.Cryptography;

public static string EncodePasswordToBase64(string password)
{  byte[] bytes   = Encoding.Unicode.GetBytes(password);
   byte[] inArray = HashAlgorithm.Create("SHA1").ComputeHash(bytes);
   return Convert.ToBase64String(inArray);
}  
3 голосов
/ 17 октября 2008

FormsAuthentication определяется в пространстве имен System.Web.Security, которое находится в сборке System.Web.dll.

То, что вы пишете приложение WinForm, не мешает вам использовать это пространство имен или ссылаться на эту сборку; они просто не выполняются по умолчанию, как это было бы для приложения WebForms.

2 голосов
/ 04 октября 2012

Если вы используете хеширование для учетных данных пользователя, я предлагаю вам сделать больше, чем просто хеширование, в идеале вы также хотите растянуть ключ.

Вот API-интерфейс для безопасного выполнения ваших задач:

https://sourceforge.net/projects/pwdtknet/

1 голос
/ 09 ноября 2008

Не могли бы вы использовать функцию BitConverter вместо цикла "x2"?

, например

return BitConverter.ToString (hash) .Replace ("-", "");

1 голос
/ 17 октября 2008

Если вам действительно нужно «отправить» это приложение форм, возможно, добавление System.Web.Security не очень хорошая идея ...

Если вам нужен хеш SHA1, есть очень простая в использовании библиотека криптографии .net с примерами на msdn. Ключ к

  1. возьмите то, что вы хотите зашифровать
  2. превратить его в байты для любой кодировки (ascii, utf *), которую вы используете
  3. Используйте одну из многих схем хэширования, встроенных в .Net, чтобы получить хэшированные байты
  4. превратить эти байты обратно в строку в той же кодировке, что и на шаге 2
  5. Сохранить результирующую хешированную строку где-нибудь для последующего сравнения

//step 1 and 2
byte[] data = System.Text.Encoding.Unicode.GetBytes(tbPassword.Text,);
byte[] result; 

//step 3
SHA1 sha = new SHA1CryptoServiceProvider(); 
result = sha.ComputeHash(data);

//step 4
string storableHashResult = System.Text.Encoding.Unicode.ToString(result);

//step 5
    // add your code here
1 голос
/ 17 октября 2008

Я думаю, что это должно работать. Все, что вам нужно сделать, это сослаться на System.Web.Security в вашем коде (и добавить его в качестве ссылки в ваш проект Visual Studio).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...