Visualizzazione dei risultati da 1 a 3 su 3

Visualizzazione discussione

  1. #1
    Utente di HTML.it L'avatar di Vash SD
    Registrato dal
    Sep 2006
    Messaggi
    502

    XOR tra due stringhe binarie

    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,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$i8)));
                    
    $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$i1) == 0) {
                        
    $newstring .= 1;
                    } else {
                        
    $newstring .= 0;
                    }
                }
                
                return 
    $newstring;
            }
            
            function 
    f_xor($stringa1$stringa2) {
                
    $newstring "";
                
                for (
    $i=0$i<8$i++) {
                    if (
    substr($stringa1$i1) != substr($stringa2$i1)) {
                        
    $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$i8), substr($bin_key$j8));
                    
    $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
    Ultima modifica di Vash SD; 02-12-2014 a 15:47
    Personal Home Page

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.