最近、私は暗号化に関するいくつかの研究を行っています。 すべてのことをよりよく理解するために、PHPでより高度なバージョンのXOR Cypherを作成しようとしています。 私はうまく動作するように暗号化機能を持っていますが、復号化機能の出力は、入力されたメッセージとはまったく違っています。PHP:XOR暗号化機能が動作しません。
アルゴリズムの考え方は、最初と最後の文字でXOR演算を実行し、次に2番目と1つではなく最後の文字でXOR演算を実行することです。 その後、最初の2文字と最後の2文字、次に3文字目と4文字目、2文字目と3文字目との間でXOR演算が実行されます。 これは、3,4,5、およびそれ以上の文字のブロックで続きます。私が今持っている
コード:私を助けしようとしているため、事前に
<?php
function encrypt($message, $key) {
$output_text = '';
// Add zeros at the end until the length of the message corresponds with the length of
the key
$message = str_pad($message,strlen($key),0);
if((strlen($message) % 2)) {
// The lenght of the message is odd, add a zero
$message = $message . 0;
}
// Define the final length of the message
$length = strlen($message);
// Firstly, take 1 character, then 2, then 3, etc. until you reach half the length of the message
for($characters=1; $characters<=($length/2); $characters++) {
// Loop from i til half the length of the message
for($i=0; $i<=(($length/2)-1); $i += $characters) {
// Take the first and last character, the the first two and the last two, etc.
// Stop when it crosses half the length
if(($i + $characters) >= ($length/2)) break;
// firstly, the characters at the beginning
$beginning = substr($message, $i, $characters);
for($j=0; $j<$characters; $j++) {
$position = ($i + 1) + $j;
$output_text .= chr(ord($beginning{$j})^ord($key{$position}));
}
// Then those at the end
$ending = substr($message, $length-(($i+1) * $characters), $characters);
for($j=0; $j<$characters; $j++) {
$position = ($length - (($i + 1)* $characters)) + $j;
$output_text .= chr(ord($ending{$j})^ord($key{$position}));
}
}
}
return $output_text;
}
function decrypt($message, $key) {
$output_text = null;
// Define the final length of the message
$length = strlen($message);
// Firstly, take 1 character, then 2, then 3, etc. until you reach half the length of the message
for($characters=1; $characters<=($length/2); $characters++) {
// Loop from i til half the length of the message
for($i=0; $i<=(($length/2)-1); $i += $characters) {
// Take the first and last character, the the first two and the last two, etc.
// Stop when it crosses half the length
if(($i + $characters) >= ($length/2)) break;
// firstly, the characters at the beginning
$beginning = substr($message, $i, $characters);
for($j=0; $j<$characters; $j++) {
$position = ($i + 1) + $j;
$output_text .= chr(ord($key{$position})^ord($beginning{$j}));
}
// The those at the end
$ending = substr($message, $length-(($i+1) * $characters), $characters);
for($j=0; $j<$characters; $j++) {
$position = ($length - (($i + 1)* $characters)) + $j;
$output_text .= chr(ord($key{$position})^ord($ending{$j}));
}
}
}
return $output_text;
}
$message = 'sampletextjusttotrythisoutcreatedin2012';
$key = '123';
$output_text = encrypt($message, $key);
echo $output_text . '<br /><hr />';
echo decrypt($output_text, $key);
ありがとう!
あなたの「暗号化」アルゴリズムがどのように機能するのかよく分かりませんが、そうではありません。これは、15バイトのクリアテキストを594バイトの暗号テキストに拡張しています。大きなテキストのクリアテキストが含まれています。 – duskwuff
それは私が記事で説明したように動作するはずで、もう一度、実際の使用のためではなく、より良い理解を得るために) – Jeroen
これを置くと、私は暗号化が全く機能しないことを知っていますが、暗号化機能、正しい復号化機能は何でしょうか? – Jeroen