Tôi đang nghiên cứu mã hóa. Và tôi gặp vấn đề như thế này:Mã hóa/giải mã bằng XOR trong PHP
Sau khi XOR viết rõ bằng một khóa, tôi nhận được một crypt, "010e010c15061b4117030f54060e54040e0642181b17", dưới dạng loại hex. Nếu tôi muốn nhận được bản tóm tắt từ crypt này, tôi nên làm gì trong PHP?
Tôi đã thử chuyển đổi nó thành chuỗi/int và sau đó đưa chúng đến XOR bằng khóa (ba chữ cái). Nhưng nó không hoạt động.
Đây là mã:
function xor_this($string) {
// Let's define our key here
$key = 'fpt';
// 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;
}
function strToHex($string)
{
$hex = '';
for ($i=0; $i < strlen($string); $i++)
{
$hex .= dechex(ord($string[$i]));
}
return $hex;
}
function hexToStr($hex)
{
$string = '';
for ($i=0; $i < strlen($hex)-1; $i+=2)
{
$string .= chr(hexdec($hex[$i].$hex[$i+1]));
}
return $string;
}
$a = "This is the test";
$b = xor_this($a);
echo xor_this($b), '-------------';
//
$c = strToHex($b);
$e = xor_this($c);
echo $e, '++++++++';
//
$d = hexToStr($c);
$f = xor_this($d);
echo $f, '=================';
Và đây là kết quả:
Đây là thử nghiệm -------------
PHP Chú ý: Uninitialized chuỗi bù đắp: 29 trong C: \ Users \ Administrator \ Desktop \ test.php trên dòng 210 PHP Stack dấu vết: PHP 1. {main}() C: \ Users \ Administrator \ Desktop \ test.php: 0 PHP 2. xor_this() C: \ Users \ Administrator \ Desktop \ test .php: 239
Chú ý: string uninitialized offset: 29 trong C: \ Users \ Administrator \ Desktop \ test.p hp trên đường dây 210
Call Stack: 0,0005 674.280 1. {} chính() C: \ Users \ Administrator \ Desktop \ test.php: 0 0.0022 674848 2. xor_this() C: \ Users \ Administrator \ Desktop \ test.php: 23 9
UBE^A►WEAVA►WEAV @ ◄ WEARAFWECWB ++++++++
Đây là zs $ fs☺ =================
Tại sao? "UBE^A►WEAVA►WEAV @ ◄WEARAFWECWB ++++++++" là kết quả mà tôi gặp khó khăn trong công việc thực sự của mình.
Tôi sẽ bỏ phiếu lên nếu bạn giải thích một số chi tiết :) –
những gì bạn muốn biết? –
Nó không hoạt động. Nguyên nhân khóa của tôi chỉ là 3 chữ cái, vì vậy Crypt phải được chia thành nhóm 3 trước khi xor. Và một điều nữa, Crypt là hexa, vì vậy chúng ta phải chuyển đổi nó trước hết - tôi nghĩ điều đó nhưng không chắc chắn - Đó là vấn đề của tôi :) – JoeNguyen