Ich bin zurzeit dabei, meinen kleinen Verslüsselungsalgorithmus zu programmieren. ER basiert auf dem Logarithmus. Um aus einem Versclüsselten Text wieder die alte Eingabe zu machen, werden zwei Keys genutzt. Diese werden heälftig aus dem Passwort generiert (crc32). Jetzt habe ich das Problem, dass ich bei meinen Tests bemerkt habe, dass als Endergebnis zwar der vorherige zu Verschlüsselne Wert herauskommt, aber dieser nicht aufs Bit genau stimmt.
Zurzeit werden lediglich Zahlen verschlüsselt (hier am Beispiel von 1).
Der Code, den ich aktuell verwende ist folgender:
Für Hilfe wäre ich sehr dankbar!
Code:
Password: Test Key: 1563025544 Key 2: 312708591 Text: 1 Txetlen: 1 Encrypted: LTE2OTE2MDI5ODAuNDg2 Decrypted: 0.9999999999998 Ausgabe = Anfangswert: false Differenz: 1.9806378759313E-13
Der Code, den ich aktuell verwende ist folgender:
PHP-Code:
<?php
$password = "Test";
$keyarr = generateKey($password);
$key = $keyarr['key'];
$key2 = $keyarr['key2'];
$text = $argv[1];
$encrypted = encrypt($keyarr, $text);
$decrypted = decrypt($keyarr, $encrypted);
echo "Password: ".$password.PHP_EOL."Key: ".$key.PHP_EOL."Key 2: ".$key2.PHP_EOL."Text: ".number_format($text).PHP_EOL."Txetlen: ".strlen($text).PHP_EOL;
echo PHP_EOL;
echo "Encrypted: ".$encrypted.PHP_EOL."Decrypted: ".$decrypted.PHP_EOL;
if($decrypted == $text) {
echo 'true';
} else {
if($decrypted <= $text) {
$difference = ($text - $decrypted);
} else {
$difference = ($decrypted - $text);
}
echo 'false.'.$difference;
}
function generateKey($password) {
if((strlen($password) % 2) == 1) {
$password = str_pad($password, (strlen($password) + 1), '=', STR_PAD_RIGHT);
}
$pwd1 = substr($password, 0, (strlen($password) / 2));
$pwd2 = substr($password, (strlen($password) / 2), strlen($password));
$crc1 = crc32($pwd1);
$crc2 = crc32($pwd2);
if($crc1 < 0) {
$crc1 = ($crc1 * -1);
}
if($crc2 < 0) {
$crc2 = ($crc2 * -1);
}
return array('key' => $crc1, 'key2' => $crc2);
}
function encrypt($keyarr, $text) {
$key = $keyarr['key'];
$key2 = $keyarr['key2'];
$encrypted = base64_encode((float)((log(($text / $key)) / log($key2)) * $key));
return $encrypted;
}
function decrypt($keyarr, $text) {
$key = $keyarr['key'];
$key2 = $keyarr['key2'];
$decrypted = (pow($key2, ((float)base64_decode($text)) / $key) * $key);
return $decrypted;
}
?>
Kommentar