17

SQL Server 2000 に次のクエリがあります。

select pwdencrypt('AAAA')

「AAAA」の暗号化された文字列を出力します。

0x0100CF465B7B12625EF019E157120D58DD46569AC7BF4118455D12625EF019E157120D58DD46569AC7BF4118455D

出力元 (「AAAA」) からの出力を変換 (復号化) するにはどうすればよいですか?

4

6 に答える 6

16

pwdencrypt はハッシュを使用しているため、ハッシュされた文字列を実際に逆にすることはできません。アルゴリズムは設計されているため、不可能です。

ユーザーが入力したパスワードを確認する場合、通常の手法はパスワードをハッシュしてから、データベース内のハッシュされたバージョンと比較することです。

これは、ユーザーが入力したテーブルを検証する方法です

SELECT password_field FROM mytable WHERE password_field=pwdencrypt(userEnteredValue)

userEnteredValue を (大きな驚き) ユーザーが入力した値に置き換えます:)

于 2008-10-06T06:33:03.290 に答える
12

あなたは将来のために自分の背中のためにロッドを作っているかもしれないことに気づきます. pwdencrypt() と pwdcompare() は文書化されていない関数であり、SQL Server の将来のバージョンでは同じように動作しない可能性があります。

DB にアクセスする前に、SHA-2 などの予測可能なアルゴリズムを使用してパスワードをハッシュしてみませんか?

于 2008-10-06T08:11:12.187 に答える
4

パスワードの暗号化を解除するべきではありません。

アプリケーションに入力されたパスワードを暗号化し、データベースからの暗号化されたパスワードと比較する必要があります。

編集 - パスワードを忘れたことが原因である場合は、新しいパスワードを作成するメカニズムをセットアップします。

于 2008-10-06T09:24:40.387 に答える
1

このパスワードを再度解読することはできませんが、「pwdcompare」という別の方法があります。これを SQL 構文で使用する方法の例を次に示します。

USE TEMPDB
GO
declare @hash varbinary (255)
CREATE TABLE tempdb..h (id_num int, hash varbinary (255))
SET @hash = pwdencrypt('123') -- encryption
INSERT INTO tempdb..h (id_num,hash) VALUES (1,@hash)
SET @hash = pwdencrypt('123')
INSERT INTO tempdb..h (id_num,hash) VALUES (2,@hash)
SELECT TOP 1 @hash = hash FROM tempdb..h WHERE id_num = 2
SELECT pwdcompare ('123', @hash) AS [Success of check] -- Comparison
SELECT * FROM tempdb..h
INSERT INTO tempdb..h (id_num,hash) 
VALUES (3,CONVERT(varbinary (255),
0x01002D60BA07FE612C8DE537DF3BFCFA49CD9968324481C1A8A8FE612C8DE537DF3BFCFA49CD9968324481C1A8A8))
SELECT TOP 1 @hash = hash FROM tempdb..h WHERE id_num = 3
SELECT pwdcompare ('123', @hash) AS [Success of check] -- Comparison
SELECT * FROM tempdb..h
DROP TABLE tempdb..h
GO
于 2008-10-06T06:35:35.593 に答える
1

簡単なグーグルは、 pwdencrypt() が決定論的ではないことを示しており、ステートメント select pwdencrypt('AAAA') は私のインストールで異なる値を返します!

この記事も参照してください http://www.theregister.co.uk/2002/07/08/cracking_ms_sql_server_passwords/

于 2008-10-06T08:33:28.010 に答える