1

六角レンチを使用したXOR実装を試しています。このコード(構文は明らかに変更されていますが、同じ考えです)をCで実行し、16進数に変換すると、結果は44 D6B47Eになります。

しかし、このコードをPHPで実行すると、36 323131が得られます。

$ stringインデックスごとに整数が返されることは明らかですが、なぜ(私にとって)は明確ではありません。

これが私のPHPコードです:

<?php
$text = "data";
$key =  array(0x20, 0xB7, 0xC0, 0x1F);
function xor_encrypt($string, $key) {
    for($i=0; $i<strlen($string); $i++) {
        $string[$i] = ord($string[$i]) ^ $key[$i % sizeof($key)];
    }
    return $string;
}
echo xor_encrypt($text, $key);
?>

そしてここにCコードがあります

BYTE m_btKey[4] = { 0x20, 0xB7, 0xC0, 0x1F };
for ( UINT i = 0; i < m_uDataLen; ++i )
    m_szData[i] ^= ( m_btKey[i % sizeof(m_btKey)] );
4

1 に答える 1

5

^結果は数値になります。chr()あなたはそれをキャラクターに戻すために使う必要があります。

于 2012-06-11T04:10:18.797 に答える