1

perlの状況

$password = 'admin';
$newchal = 'hnfdfhj238478wdehf';

$password2 = unpack "H32", ($password ^ $newchal);

これは、適切なエンコードが必要な RADIUS サーバーにこのパスワードを送信しているため、非常に重要です。上記の方法は標準スクリプトによるものです。

今PHPで試しました:

$password2 = unpack("H32", $password.''.$newchal);

結果を比較しましたが、違います.. perlで「^」が何を意味するのかわかりません。誰でも私を助けることができますか?

4

1 に答える 1

2

は、 Perl や PHP などの C 派生言語^のビット単位の XOR (排他的論理和) 演算子です。

詳細については、PHPおよびPerlのドキュメントを参照してください。

XOR 演算は、両方のオペランドの 1 つだけが true の場合に true です。真理値表は

0 ^ 0 == 0
0 ^ 1 == 1
1 ^ 0 == 1
1 ^ 1 == 0

ビット単位の XOR が文字列で使用されると、バイナリ表現の各ビットが一緒に XOR されます。

たとえばa、ASCII0x61であり、hASCII0x68です。一緒に XOR すると、タブが生成されます。

a  (61): 01100001
h  (68): 01101000
\t (09): 00001001

ビット単位の XOR は、可逆的な「暗号化」に使用されることがありますが、このトリックは広く知られており、非常に安全ではありません。たとえば、あなたの例では、キーよりも長いパスワードは完全に XOR されないため、平文の一部が表示されたままになります。複数のパスワードで同じキーが共有されている場合、クラッキングは非常に安価です。このような「暗号化」も、平文攻撃などに対して非常に脆弱です。パスワードを保存するには、より洗練されたハッシュ アルゴリズムを使用する必要があります。bcryptPBKDF2などの特別なパスワード ハッシュ アルゴリズムがあります。

于 2013-09-24T13:48:21.220 に答える