Mit all dem Wissen, das ich im Internet finden konnte, kam ich mit einer OpenSL-Funktion zum Verschlüsseln und Entschlüsseln von Salt. Es funktioniert 90% der Zeit, aber jedes Mal in einem Wile kehrt die Entschlüsselung mit einem leeren Stich oder zufälligen Bytes zurück, die nichts mit den verschlüsselten Daten zu tun haben. Der Code Ich verwende ist:PHP openssl_decrypt liefert merkwürdige Ausgabe ca. 10% der Zeit
function Encrypt($subject, $method, $saltLength, $key){
if($method==0){
$salt=random_bytes($saltLength);
$key=hash('sha256', $salt.$key);
$iv=random_bytes(16);
$encrypt=base64_encode(openssl_encrypt($subject, 'aes-256-ctr', $key, 0, $iv));
$return=base64_encode("$method:$salt:$iv:$encrypt");
}
return($return);
}
function Decrypt($subject, $key){
$components = explode(':', base64_decode($subject));
$method=$components[0];
if($method==0){
$salt=$components[1];
$key = hash('sha256', $salt.$key);
$iv=$components[2];
$encrypt=base64_decode($components[3]);
$return=(openssl_decrypt($encrypt, 'aes-256-ctr', $key, 0, $iv));
}
return($return);
}
$testE=Encrypt('Test', 0, 20, 'Key0');
var_dump($testE);
echo('<br><br>');
$testD=Decrypt($testE, 'Key0');
var_dump($testD);
echo('<br><br>');
$testD=Decrypt($testE, 'Key0');
var_dump($testD);
echo('<br><br>');
Und ein Beispiel für die fehlerhaften Ergebnisse für diesen Code wäre:
string(72) "MDrVsJAIE8OFjyM6y5dt+xkij5m/rTrHTnzeWs0IRrTKvNR1L7wfOmJrSlNRWFIzUFQwPQ=="
string(1) "�"
string(1) "�"
Oder die Rückkehr eines völlig leeren String:
string(72) "MDrQ+5c83vJXnva1OjrbJ2RWGjU5ajrwCn+qCneIIOqh48Gt0JmbOllsZFVUMHRuUFQwPQ=="
string(0) ""
string(0) ""
Der Grund, warum ich zweimal entschlüsselt habe, ist zu sehen, ob der Fehler in der Entschlüsselung oder der Verschlüsselung liegt. Die Ergebnisse zeigen eindeutig, dass die Verschlüsselung in irgendeiner Weise fehlerhaft ist.
Meine Frage ist, was verursacht diese fehlerhafte Verschlüsselung der Daten? & kann ich diese Methode verbessern und noch sicherer machen?
Vielleicht möchten Sie Base64 codieren jedes Teil, Ihr Salz oder iv kann ein produzieren ':' –
Tritt dieses Problem mit den gleichen Daten - dh: wenn Sie die Verschlüsselung/Entschlüsselung mit den gleichen Anfangsdaten für 100 Mal durchgeführt würde es ist in Ordnung? – RamRaider
Ja, ich denke, das ist das Problem '0: հ Å #: ˗m": N | ZF'u /: bkJSQXR3PT0 = 'ist Ihre decodierte fehlgeschlagen. –