I plan to make a class that can encode files into ASCII characters and decode into readable texts. Basically, the idea of my encoding is to encode all non-space characters into ASCII and replace the spaces into random non-numeric characters.
Example: "Hello World!" to "72101108108111^8711111410810033"
In this manner, if I have an entire file with multiple paragraphs and encode it, it wouldn’t be so obvious that I converted the characters to ASCII. So far this is my code:
$text = str_split("Hello World!"); $content = ""; $random = str_split("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*-+?/_="); foreach($text as $t){ if ($t == " "){ $count = rand(1,66); $content .= $random[$count-1]; } else $content .= ord($t); } echo $content."<br>"; $decode = str_split($content); $script = ""; $tostring = ""; foreach($decode as $d){ if (is_numeric($d)){ $tostring .= $d; }else{ $script .= chr($tostring); $tostring = ""; } } echo $script;
I’m struggling to figure out the problem with my code. This is the result of it:
ASCII: 72101108108111-8711111410810033 TEXT: O
Please enlighten me!
Advertisement
Answer
Two problems: you were attempting to pass multiple numbers to chr()
which is designed to return a single character, and you had no way to tell how long your numbers were going to be. Using your example above: is it 72, 101, 108, 108 or is it 72, 10, 10, 81, 08? So, fix your numbers at 3 digits using sprintf()
and then you’ll know when to pass data to chr()
and continue with your decoding.
$text = str_split("Hello World!"); $content = ""; $random = str_split("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*-+?/_="); foreach($text as $t){ if ($t === " "){ $count = rand(1, 66); $content .= $random[$count - 1]; } else { // this will always be three digits now $content .= sprintf("%03d", ord($t)); } } echo $content."<br>"; $decode = str_split($content); $script = ""; $tostring = ""; foreach($decode as $d){ if (is_numeric($d)){ $tostring .= $d; if (strlen($tostring) === 3) { // you've got 3 numbers so you can decode and reset $script .= chr($tostring); $tostring = ""; } } else { // also you weren't putting your spaces back in $script .= " "; } } echo $script;