Salve a tutti,
Sto cercando di realizzare uno script che mi converte ogni carattere di una stringa nel suo corrispettivo numero ASCII, converta esso in binario ad 8 bit. Dopo aver ricevuto la sequenza binaria di una stringa qualsiasi e di una secondaria, mi faccia lo xor tra le due. In particolare, è un semplicissimo algoritmo di crittografia a chiave simmetrica.
Vi posto parte il codice in via di sviluppo:
Codice PHP:
<?php
class Coding {
// Prende la stringa, trasforma i caratteri nel corrispettivo ASCII e tale numero lo converte in base 2.
function BIN($stringa) {
$binstring = "";
$l = strlen($stringa);
for($i = 0; $i<$l; $i++) {
$binstring .= substr("00000000",0,8 - strlen(decbin(ord($stringa{$i})))).decbin(ord($stringa{$i}));
}
return $binstring;
}
// Funzione BIN inversa.
function BIN_1($stringa) {
$stringaRicostruita = "";
$l = strlen($stringa);
$i = 0;
while($i < $l) {
$stringaRicostruita .= chr(bindec(substr($stringa, $i, 8)));
$i+=8;
}
return $stringaRicostruita;
}
// Calcola il negato di una sequenza di bit.
function not($stringa) {
$newstring = "";
$l = strlen($stringa);
for ($i=0; $i<$l; $i++) {
if(substr($stringa, $i, 1) == 0) {
$newstring .= 1;
} else {
$newstring .= 0;
}
}
return $newstring;
}
function f_xor($stringa1, $stringa2) {
$newstring = "";
for ($i=0; $i<8; $i++) {
if (substr($stringa1, $i, 1) != substr($stringa2, $i, 1)) {
$newstring .= 1;
} else {
$newstring .= 0;
}
}
return $newstring;
}
function crypt($stringa, $key) {
$bin_str = $this->BIN($stringa);
$bin_key = $this->BIN($key);
$not_bin_str = $this->not($bin_str);
$l = strlen($not_bin_str);
$l_key = strlen($bin_key);
$result = "";
$j = 0;
for($i=0; $i<$l; $i+=8) {
// Se ho fatto lo xor con ogni lettera della chiave, ricomincio.
if ($j > $l_key) {
$j = 0;
}
$result .= $this->f_xor(substr($not_bin_str, $i, 8), substr($bin_key, $j, 8));
$j+=8;
}
return $result;
}
function decrypt($stringa, $key) {
$bin_str = $this->BIN_1($stringa);
}
}
// Chiave per crittografare la stringa simmetricamente.
//$key = "abcdefghijklmnopqrstuvwxyz123456";
$stringa = "aabacada";
$key = "asds";
$o = new Coding;
echo $o->not($o->BIN($stringa))."<br />";
echo $o->BIN($key).$o->BIN($key)."<br />";
echo $o->crypt($stringa, $key);
?>
OutPut:
codice:
1001111010011110100111011001111010011100100111101001101110011110
0110000101110011011001000111001101100001011100110110010001110011
1111111111101101111110011110110110011100111111111110100011111010
La terza stringa dovrebbe dare l'output xor tra la NOT stringa e la key. Presumo ci sia un problema nella funzione crypt(), quindi nella ricorsione dello xor,ma sono giorni che cerco questo errore e non riesco a trovarlo 


Chiedo aiuto