2009-04-22 9 views
2

すべてをハッシュ化された - 私は(SQL、ASP)以下のトピックのほとんどで初心者です。とにかく...取り扱いは、事前に</p> <p>申し訳ありませんが、SQL Serverでvarbinary型として格納されているパスワードとクラシックASP

ユーザー名とパスワードでログインする必要がある非常にシンプルなWebアプリケーションがあります。

フロントエンドは、パスワードのsalted SHA1ハッシュを作成し、それを(ユーザーの名前と一緒に)ASPページに投稿します。

そのASPページはデータを取得し、SQL Serverデータベース内のストアドプロシージャを呼び出し、ユーザー名とハッシュパスワードを渡します。ストアドプロシージャは情報を 'users'テーブルに書き込みます。

表のパスワード列の型はvarbinaryです。

私が知る限り、ASPがパスワードを取得すると(password = Request.Form( "password"))、それは文字列です。 varbinary型としてそれを扱うに

私は 'トリック' SQL Serverのできる

私は、クエリをこのように作成した場合:

クエリ '&ユーザ名& "パスワード@ = 0xの" = "ユーザ名@ = EXEC sp_save_user"' &パスワード

IOW - パスワード文字列に "0x"を付加しています。 (、204、1、40、パスワード "@パスワード")

SET objParam = objCommand.CreateParameter:

例:

しかし、私はそれがパラメータ化クエリを使用するより良い練習だと読みました

ただし、パラメータはバイナリ(204)とみなされますが、パスワードは文字列であるため、これは失敗します。

「4a5e6a8d521ed487b81c91e131cf27e8dae9b783」のような文字列をASPのバイナリに変換するにはどうすればよいですか?

事前に感謝します。

答えて

1

私はこの種のものに頭を打つのに慣れた日々を覚えています。私はあなたがASP.Netへのアップグレードを取得する提案が、その間に次のコード(VBScriptが)あなたが欲しいものを行う必要があります。

<% 

Dim result 

main() 

function main() 

    Dim userName : userName = "Martin" 
    Dim data : data = "4a5e6a8d521ed487b81c91e131cf27e8dae9b783" 

    Dim db: Set db = Server.CreateObject("ADODB.Connection") 
    db.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Password=password1;Initial Catalog=Test;Data Source=(local)" 

    Dim cmd : Set cmd = Server.CreateObject("ADODB.Command") 
    cmd.ActiveConnection = db 

    cmd.CommandText = "dbo.[sp_save_user]" 
    cmd.CommandType = 4  
    cmd.Parameters.Append cmd.CreateParameter("@UserName", 200, 1, 50, userName) 
    Dim bytes : bytes = stringToBinary(data) 
    cmd.Parameters.Append cmd.CreateParameter("@Password", 204, 1, LenB(bytes), bytes) 
    cmd.Execute() 

    db.Close 

    result = "done" 

end function 

function stringToBinary(str) 
    dim ahex 
    for i=0 to len(str) - 1 step 2 
     Dim strDigit1 
     Dim strDigit2 
     strDigit1 = Ucase(Mid(str, i+1, 1)) 
     strDigit2 = Ucase(Mid(str, i+2, 1)) 

     Dim byteDigit1 
     Dim byteDigit2 
     byteDigit1 = InStr("ABCDEF", strDigit1) - 1 
     byteDigit2 = InStr("ABCDEF", strDigit2) - 1 

     ahex = ahex & ChrB((byteDigit1 * 16) + byteDigit2) 
    next 

    stringToBinary = ahex   
end function 
%> 
<html> 
    <head> 
     <title>Test</title> 
    </head> 
    <body> 
     <h1><%= result %></h1> 
    </body> 
</html> 
0

私はあなたがDBを変更するスコープを持っていると仮定し...より具体的にストアドプロシージャ?

ハッシュを文字列として受け入れ、SProc内でvarbinaryにキャストするのはなぜですか? SQL Serverでの> VARBINARY機能が、this functionはたぶん少し無関係

+0

VBScriptで変換を行うのと同じくらい簡単に、より新しいUIテクノロジにアップグレードするときにデータベースインターフェイスをきれいに保つことができます。 –

0

、簡単なソリューションとして提供されていますが、あなたがしている場合、私は、思ったんだけど - さらに読む

は、組み込みの文字列はありませんクライアントにハッシュを塩漬けして、どうやって塩を安全に保っていますか?

+1

私は、塩を安全に保管することは重要ではないことを理解しています。パスワードの塩析のポイントは、あらかじめ定義されたハッシュパスワードのリストを誰も使用できないようにすることです。言い換えれば、誰かが私の塩を手に入れたら、可能なすべてのパスワード+私の塩のハッシュバージョンの新しい辞書を作成することができますが、それは努力する価値がないほど十分に時間がかかります。もちろん、私は専門家ではないので、塩の穀物でこれを取る。 ;-) – mattstuehler

関連する問題