 |
28.01.2007, 15:36
| Nach oben
#1 | | Erfahrener Benutzer
Registriert seit: 16.09.2005 Ort: CH :-)
Beiträge: 123
| Problem mit ver-, bzw entschlüsslung
Hallo
Ich habe mehr aus spass ein kleines ver-, bzw entschlüsslungsprogrämmchen schreiben wollen. Nun habe ich allerdings ein Probem, welches mich so ziemlich zum verzweifeln bringt:
Den Code mal vorneweg: PHP-Code: <?PHP /* Versuch einer Verschlüsselung von GET daten. 28.1.2007 */
/* IDEE: Position von a angeben, davon abhängig sind die anderen. */
$alphabet = array(1 => "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","ä","ö","ü","&","=",1,2,3,4,5,6,7,8,9,0,"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"); $reversed_alpha = array_reverse($alphabet, TRUE);
function generate_coder () { $num = rand(10,42); $coder = ($num*3+$num-36)/2; return $coder; }
function generate_code_array ($coder) { global $alphabet, $reversed_alpha; $coded_alpha = array(); $i = 0; foreach ($alphabet as $key => $alpha) { if ($i == 0) { if(67+$key-$coder <= 67) { $coded_key = 67+$key-$coder; //Das ist einfach so da, damit man den Code nicht so schnell rekonstruiren kann aus dem Schlüssel(so zumindest meine Idee...) $i = $coded_key; } else { $coded_key = 67-$key-$coder; $i = $coded_key; } } if ($i > 67) { $i = 1; } $coded_alpha[$alpha] = $reversed_alpha[$i]; $i ++; } return $coded_alpha; }
function code_text ($coder, $text) { $coded_alpha = generate_code_array ($coder); $text_splited = preg_split('#(?<=.)(?=.)#s', $text); $split = array(); $i = 0; foreach ($text_splited as $value) { if ( $value == " ") { $splitt[$i] = $value; } else { $splitt[$i] = str_replace($value,$coded_alpha[$value],$value); } $i++; } $text = ""; foreach ($splitt as $value) { $text .= $value; } return $text; }
function decode ($coder, $text) { $coded_alpha = generate_code_array ($coder); print_r($coded_alpha); $text_splited = preg_split('#(?<=.)(?=.)#s', $text); echo "<br>"; print_r($text_splited); $split = array(); $i = 1; foreach ($text_splited as $value) { if ( $value === " ") { $splitt[$i] = $value; } else { $splitt[$i] = str_replace($value,array_search($value,$coded_alpha),$value); echo "<br>".array_search($value,$coded_alpha)." <= ".$value; echo " $value array_search($value,$coded_alpha)"; } $i++; } $text = ""; foreach ($splitt as $value) { $text .= $value; } return $text; }
$code = generate_coder(); $text = "Einst war ich ein schöner Text"; $coded = code_text ($code, $text); $decoded = decode ($code, $coded); echo "<br><br>Ursprünglicher Text: ".$text."<br>Verschlüsselt: ".$coded."<br>Wieder Entschlüsselt: ".$decoded."<br>Verwendeter Schlüssel: ".$code; ?> Vermutlich ist er nicht optimirt, ich bin kein Profi
Das Problem liegt bei der Entschlüsselung, je nach Schlüssel werden da einige bzw. alle Zeichen nicht richtig entschlüsselt. Eine komplett richtige Entschlüsselung erhalte ich nur mit dem Schlüssel 20. Trotz meinen Debuging versuchen find eich den Fehler einfach nicht. Weiss jemand von euch weiter? Hier könnt ihr das Script in "Life" ausprobieren.
Ich bin für jede Hilfe dankbar, garnele
|
| |
29.01.2007, 16:39
| Nach oben
#2 | | Oliver O.
Registriert seit: 17.08.2005
Beiträge: 428
| Lösung:
Hier mit funktioniert es: PHP-Code: <?PHP /* Versuch einer Verschlüsselung von GET daten. 28.1.2007 */
/* IDEE: Position von a angeben, davon abhängig sind die anderen. */
$alphabet = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","ä","ö","ü","&","=","1","2","3","4","5","6","7","8","9","0","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"); $reversed_alpha = array_reverse($alphabet, TRUE); $len = count($alphabet);
function generate_coder () { $num = rand(10,42); $coder = ($num*4-38)/2; //[min]2 <=> [max]66 return $coder; }
function generate_code_array ($coder) { global $alphabet, $reversed_alpha, $len; $coded_alpha = array(); $coded_key = $len - $coder; $i = $coded_key; foreach ($alphabet as $alpha) { if ($i >= $len) { $i = 0; } $coded_alpha[$alpha] = $reversed_alpha[$i]; $i ++; } return $coded_alpha; }
function code_text ($coder, $text) { $coded_alpha = generate_code_array ($coder); $text_splited = preg_split('#(?<=.)(?=.)#s', $text); $return = ""; $i = 0; foreach ($text_splited as $value) { if ( $value == " ") { $return .= $value; } else { $return .= $coded_alpha[$value]; } $i++; } return $return; }
function decode_text ($coder, $text) { $coded_alpha = generate_code_array ($coder); $text_splited = preg_split('#(?<=.)(?=.)#s', $text); $return = ""; $i = 0; foreach ($text_splited as $value) { if ( $value == " ") { $return .= $value; } else { $return .= array_search($value, $coded_alpha); } $i++; } return $return; }
$code = generate_coder(); $text = "einst war ich ein schöner text"; $coded = code_text ($code, $text); $decoded = decode_text($code, $coded); echo "($code) $text => $coded => $decoded<br>"; ?> es lag an der Methode generate_code_array()
|
| | |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | | | | Themen-Optionen | Thema durchsuchen | | | |
Forumregeln
| Es ist dir nicht erlaubt, neue Themen zu verfassen. Es ist dir nicht erlaubt, auf Beiträge zu antworten. Es ist dir nicht erlaubt, Anhänge hochzuladen. Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten. HTML-Code ist aus. | | | Alle Zeitangaben in WEZ +1. Es ist jetzt 08:56 Uhr.
|