2017-04-12 9 views
-1

私は未知のハッシュ方法を使用してパスワードを保存するソフトウェアを持っています。たとえば123456789がパスワードとして設定されている場合、データベースには「塩」(塩がランダムに生成されているように見える)と「ハッシュ」の2つのフィールドが格納されます。そして、私はソフトウェアがどのようにそのハッシュ文字列に達するのか知る必要があります。 origial文字列の例としてハッシュされた文字列のアルゴリズムを検出する方法

:123456789

塩である:ifWIg1IB

ハッシュ化は次のようになりますので、経由統合ログインシステムを作るの私はそれを知っている必要がありQkKtpxSqd + kIH2EuMkNdWV44B2g =

このハッシュされたパスワード。私はオフィス内の各人のために多くのユーザ名とパスワードを避けることが非常に重要だと思います。

最高の敬意を表して

+0

リバースエンジニアリングからあなたを防ぐために、パスワードセキュリティの全体のポイントではないですか? – buffjape

+0

元の文字列のバイト数を取ってから、何らかの方法で(アルゴリズムに依存して)ソルトのバイト数と組み合わせます。次に、結果に1回または複数回ハッシュ関数を適用します。 –

+0

@buffjape:私はOPが元のパスワードを知りたいと思っていません。(これは普及しているハッシュアルゴリズム(不可能に近い)のためですが、アルゴリズムを知りたがっています。しかし、実際には、難読化は十分に安全ではありませんが、これは追加対策の1つです。 –

答えて

1

「ハッシュ」出力はベース64エンコードされた文字列です。文字列をデコードすると、20バイトのダイジェストが得られます。 SHA-1は、それが生成プロセスがあるように見えるので、20バイトのハッシュを生成します。

base64(sha1(combine(salt, password))) 

塩とパスワード平文を組み合わせるには、2つの明白なアプローチがある - 追加またはパスワードに塩を付加します。あなたは塩を付加した場合には、次のアルゴリズムエンコードされたダイジェストを生成するためで終わる:

public static string GenPasswordString(string password, string salt) 
{ 
    byte[] bytes = System.Text.Encoding.UTF8.GetBytes(salt + password); 
    using (var alg = new System.Security.Cryptography.SHA1Managed()) 
    { 
     byte[] hashBytes = alg.ComputeHash(bytes); 
     return Convert.ToBase64String(hashBytes); 
    } 
} 

GenPasswordString("123456789", "ifWIg1IB") == "QkKtpxSqd+kIH2EuMkNdWV44B2g=" 
+0

神はあなたを祝福します。できます。 – VictoryMarch

関連する問題