-4

塩:なんでもいいです。
ワークファクター: 何でもかまいません。
以下はすべて同じハッシュを生成します!

$pad = base64_decode('/gB=');
$data = array(
    'LegitimatePayload',
    'LaterSwitchedToMaliciousPayload',
    'Abracadabra',
    'hatIsGoingOn',
    'CanBeAlmostAnything',
);

foreach($data as $str){
    echo crypt($pad.$str, '$2a$04$AnySaltHere')."<br>\n";
}


出力:

$2a$04$AnySaltHere$$$$$$$$$$.m/QKi19jyBmSuP2VMcVuFRw.weCNRBa
$2a$04$AnySaltHere$$$$$$$$$$.m/QKi19jyBmSuP2VMcVuFRw.weCNRBa
$2a$04$AnySaltHere$$$$$$$$$$.m/QKi19jyBmSuP2VMcVuFRw.weCNRBa
$2a$04$AnySaltHere$$$$$$$$$$.m/QKi19jyBmSuP2VMcVuFRw.weCNRBa
$2a$04$AnySaltHere$$$$$$$$$$.m/QKi19jyBmSuP2VMcVuFRw.weCNRBa
$2a$04$AnySaltHere$$$$$$$$$$.m/QKi19jyBmSuP2VMcVuFRw.weCNRBa

編集:
最初の 2 バイトが同じでハッシュが異なる文字列を
次に
示します:

4

3 に答える 3

10

すべての文字列にはプレフィックスがあり、実行すると1base64_decode文字になり、0x00の後に余分な文字が変化します。標準の暗号化は文字で停止するため、すべての暗号化呼び出しは文字を暗号化するだけです。0xfe0x000x000xfe

電話するだけで確認できます

echo crypt("\376", '$2a$04$AnySaltHere')."<br>\n";

同じ結果になります。

私はあなたbase64_decodeが実際に呼び出すことを意味する誤って使用したと仮定していますbase64_encode

編集:ローマンが指摘するように、文字列

"/gBQyoK71jVY/J7QuBNJuFdxyf2eTBCs42chkx6ZvpJYszpzg==="

実際には、同じプレフィックスにもかかわらず、他の何かに完全に暗号化されます。これは、その文字列が実際には無効なbase64であり、base64_decodeがfalseを返すためです。その結果、代わりに空の文字列と同じハッシュに文字列が暗号化されます。

于 2012-02-19T20:15:38.767 に答える
5

有効なbase64でエンコードされた文字列を提供していないため、base64_decodeはすべてのテストケースに対しておそらくfalseを返し、すべて同じように暗号化します。とにかくbase64_decodeを使用しているのはなぜですか?

于 2012-02-19T20:10:08.427 に答える
0

あなたはおそらく望んbase64_encodeでいないでしょうbase64_decode。すべてが同じ結果を返す理由は、結果が常に false であるためです。

于 2012-02-19T20:13:22.920 に答える