Xor 暗号化は初めてで、次のコードで問題が発生しています。
function xor_this($string) {
// Let's define our key here
$key = ('magic_key');
// Our plaintext/ciphertext
$text =$string;
// Our output text
$outText = '';
// Iterate through each character
for($i=0;$i<strlen($text);)
{
for($j=0;$j<strlen($key);$j++,$i++)
{
$outText .= $text{$i} ^ $key{$j};
//echo 'i='.$i.', '.'j='.$j.', '.$outText{$i}.'<br />'; //for debugging
}
}
return $outText;
}
これを実行すると、「dog」などの通常の文字列では機能しますが、「12345」などの数字を含む文字列では部分的にしか機能しません。
実証するには...
xor_this('dog')
= 'UYV'
xor_this('123')
= ''
xor_this( xor_this('123') )
= '123' であることに注目するのも興味深いことです。この問題は、ビット単位の演算子に対する私の不安定な理解のどこかにあると確信しています。または、PHP が数値を含む文字列を処理する方法に問題がある可能性もあります。ここで何が悪いのかを正確に知っている賢い人がそこにいるに違いない。ありがとう。
編集#1:それは本当に「暗号化」ではありません。難読化という言葉が正しいと思いますが、それは私が行っていることです。ユーザーが簡単に改ざんできないように、重要でないデータを含むコードを渡す必要があります。彼らは、時間制限のあるアクティビティをオフラインで完了し、このコードを介してオンライン スコアボードに時間を送信しています。オフライン アクティビティは、時間 (ミリ秒単位)を難読化します。このコードを受信し、時間を含む文字列に戻すスクリプトを作成する必要があります。