2015-10-22 3 views
5

私は新しい手続きを作成することによってパスワードを暗号化するよう頼まれました。私は入力キーの各文字を明らかに関係のない文字で変更するビットを使って作業することを考えていたので、この関数を書きました。 「)PHPコードでの作業メートル:私は自分のパスワードを暗号化した後このビット単位の機能を元に戻す方法はありますか?

function CBS($digits, $n_times) { 
    $mask = 0x7FFFFFFF; 
    $digits = intval($digits); 
    if($n_times > 0) { 
     $digits = ($digits<<$n_times%32) & (($digits>>(32-$n_times%32)) & ($mask>>(31-$n_times%32))); 
    }elseif($n_times < 0) { 
     $n_times = abs($n_times); 
     $digits = (($digits>>$n_times%32) & ($mask >> (-1+$n_times%32))) | ($digits<<(32-$n_times%32)); 
    } 
    return decbin($digits); 
} 

はもちろん、私はそれを解読することができるはずです。

これを行う方法はありますか?

あなたは私に言葉でそれを私に説明することができればそれをするためのコードを書く必要はありません。

+0

私もハッシュしましたが、暗号化するので、私はそれをしなければならないと思います... –

+0

これはおそらく、あなたの認証のための仕様の一部です。これをパスワードの範囲で教えてください。 – cybermonkey

+0

さて、もっとも安全なアルゴリズムを作成する私たちの誰かが最高のマークをつけるので、私はベストを尽くそうとしています! –

答えて

1

「もちろん私は自分のパスワードを暗号化した後、私はそれを解読できるはずです。」 - 基本的に間違っている!右の暗号化機能(すなわち、ハッシュ関数)は、逆機能を有するべきではない。非常に単純な識別アルゴリズム:
1.ユーザーは、暗号化機能(entered_hash = F(パスワード))
3を使用してパスワードからパスワード
2.取得ハッシュがright_hash_stored
NEVERストアのパスワード、ハッシュのみでentered_hash比較入ります!

あなたの暗号化機能を逆にしたいのであれば、それは逆の機能から成っているはずだから、ANDとORはそうではありませんが、ROTとXORはあります。 あなたが必要とするのは、ROT/XORの宝庫です(XORマスクの場合、previosのステップ値の暗号化された値を使うことができます。この場合は保存する必要があります)

+0

はい、私はそれが暗号化されるべきではなく、入力されたかどうかを確認する方法を完全に知っています。パスワードがtと一致する彼は1つをハッシュしましたが、何らかの理由でこのエクササイズ要求が暗号化された後にそれを逆転させます。 もちろん、これは専門的な仕事ではありません。 –

+0

ROTでは循環シフトを意味しますか? –

+0

はい:たとえば、リスト[2,3]があります。各値は、XOR、すなわち数値からシフトへのXORシフト結果を伴う循環シフトを意味します(左シフトさせます)。ステップを暗号化する: –

関連する問題