Frage

Wir haben in unserem Produkt eine Situation, in der einige Daten über einen langen Zeitraum in der Datenbank der Anwendung als SQL-String (wahlweise MS SQL Server oder Sybase SQL irgendwo) gespeichert waren, der über die Windows-API-Funktion verschlüsselt wurde CryptEncrypt. (direkt und entschlüsselbar)

Das Problem besteht darin, dass CryptEncrypt NULL-Werte in der Ausgabe erzeugen kann, was bedeutet, dass der CipherText durch die Zeichenfolgenmanipulationen irgendwann abgeschnitten wird, wenn er in der Datenbank gespeichert wird.

Idealerweise möchten wir einen Algorithmus verwenden, der CipherText erzeugt, der keine NULL-Werte enthält, da dies die geringsten Änderungen an den vorhandenen Datenbanken verursacht (Änderung einer Spalte von Zeichenfolge zu Binär und Code zur Verarbeitung von Binärdaten anstelle von Zeichenfolgen). und entschlüsseln Sie einfach vorhandene Daten und verschlüsseln Sie sie zum Zeitpunkt des Datenbank-Upgrades erneut mit dem neuen Algorithmus.

Der Algorithmus muss nicht der sicherste sein, da sich die Datenbank bereits in einer einigermaßen sicheren Umgebung befindet (kein offenes Netzwerk/die Inter-Webs), aber er muss besser als ROT13 sein (den ich fast im Kopf entschlüsseln kann). Jetzt!)

bearbeiten:Gibt es übrigens einen bestimmten Grund für die Änderung von Chiffretext in Chiffretext?Geheimtext scheint häufiger verwendet zu werden ...

War es hilfreich?

Lösung

Bei jedem einigermaßen anständigen Algorithmus ist die Wahrscheinlichkeit groß, dass irgendwo im resultierenden Chiffretext ein NULL-Wert generiert wird.

Warum nicht so etwas tun? Base-64-Kodierung Ihr resultierender binärer Blob, bevor er in der Datenbank verbleibt?(Beispielimplementierung in C++).

Andere Tipps

Es ist eine gute Idee, einen Hash zu speichern.Bitte lesen Sie jedoch unbedingt Jeffs Wahrscheinlich speichern Sie Passwörter falsch.

Das ist eine interessante Route, OJ.Wir prüfen die Machbarkeit einer nicht umkehrbaren Methode (wobei wir weiterhin sicherstellen, dass wir die zu entschlüsselnden Daten nicht explizit abrufen), z.Speichern Sie einfach einen Hash, um ihn mit einer Übermittlung zu vergleichen

Es scheint, dass der Entwickler, der damit umgeht, die vorhandene Verschlüsselung umschließen wird yEnc um die Tabellenintegrität zu wahren, da die Daten abrufbar sein müssen, und das erspart Ihnen das ganze Chaos mit „Infinite-Improbab“.Ähhh, das Ändern der Säulentypen bei verschanzten Installationen.Prost

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top