8

私の Win フォーム アプリは 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
}
4

6 に答える 6

22
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);
}  
于 2008-10-17T16:16:57.650 に答える
3

FormsAuthentication は、System.Web.dll アセンブリにある System.Web.Security 名前空間で定義されています。

WinForm アプリを作成しているからといって、その名前空間を使用したり、そのアセンブリを参照したりすることはできません。WebForms アプリの場合とは異なり、デフォルトでは実行されません。

于 2008-10-17T16:06:06.313 に答える
2

ユーザー資格情報にハッシュを使用している場合は、ハッシュだけでなく、理想的にはキー ストレッチングも行うことをお勧めします。

安全な方法でやりたいことを行うための API を次に示します。

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

于 2012-10-04T00:46:23.650 に答える
1

このフォームアプリを実際に「出荷」する必要がある場合は、System.Web.Securityを追加するのはあまり良い考えではありません...

SHA1ハッシュが必要な場合は、msdnの例を含む非常に使いやすい.net暗号化ライブラリがあります。重要なのは

  1. 暗号化したいものを取ります
  2. 使用しているエンコーディング(ascii、utf *)のバイトに変換します
  3. .Netに組み込まれている多くのハッシュスキームの1つを使用して、ハッシュされたバイトを取得します
  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
于 2008-10-17T16:22:17.297 に答える
1

うまくいくはずだと思います。必要なのは、コードで System.Web.Security を参照することだけです (そして、それを参照として Visual Studio プロジェクトに追加します)。

于 2008-10-17T16:03:27.647 に答える
1

「x2」ループの代わりに BitConverter 関数を使用できませんか?

例えば

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

于 2008-11-09T15:15:03.230 に答える