Durch PHP verschlüsselte Daten (mcrypt) in Access entschlüsseln
Hallo Forengemeinde,
mein erster Beitrag in diesem Forum ist eine Frage an die Access- / VBA-Experten.
Ich habe eine MySQL-Datenbank, die durch PHP-Skripte mit Leben gefüllt wird. Ein Teil der Daten wird mittels mcrypt (ofb) vor dem Eintragen in die Datenbank verschlüsselt. Das und auch das spätere Entschlüsseln funktioniert mit der Kombination PHP-MySQL wunderbar.
Nun habe ich das Problem, dass ich mit Access 2003 auf diese verschlüsselten Daten zugreifen und sie auch bearbeiten muss. Access ist per ODBC mit der MySQL verbunden und holt / schreibt auch alle unverschlüsselten Daten. Wie kann ich nun die verschlüsselten Daten in Access lesbar machen? An ein Zurückschreiben in die MySQL-Datenbank denke ich dabei zunächst noch gar nicht.
Der PHP-Code zum Verschlüsseln sieht so aus:
Zum Entschlüsseln entsprechend:
Bin für jeden Lösungsansatz offen und dankbar!
Gruß
pagerank0
Nun habe ich das Problem, dass ich mit Access 2003 auf diese verschlüsselten Daten zugreifen und sie auch bearbeiten muss. Access ist per ODBC mit der MySQL verbunden und holt / schreibt auch alle unverschlüsselten Daten. Wie kann ich nun die verschlüsselten Daten in Access lesbar machen? An ein Zurückschreiben in die MySQL-Datenbank denke ich dabei zunächst noch gar nicht.
Der PHP-Code zum Verschlüsseln sieht so aus:
<?
$key_value = "irgendeinschluessel";
$data = "Daten im Klartext";
$crypted_data = mcrypt_ofb(MCRYPT_DES, $key_value, $data, MCRYPT_ENCRYPT);
?>
Zum Entschlüsseln entsprechend:
<?
$key_value = "irgendeinschluessel";
$data = "die_kryptischen_zeichen_aus_der_datenbank";
$decrypted_data = mcrypt_ofb(MCRYPT_DES, $key_value, $data, MCRYPT_DECRYPT);
?>
Bin für jeden Lösungsansatz offen und dankbar!
Gruß
pagerank0
Please also mark the comments that contributed to the solution of the article
Content-Key: 128367
Url: https://administrator.de/contentid/128367
Printed on: April 24, 2024 at 11:04 o'clock
12 Comments
Latest comment
Zitat von @pagerank0:
Ein Teil der Daten wird mittels mcrypt (ofb) vor
dem Eintragen in die Datenbank verschlüsselt. Das und auch das
spätere Entschlüsseln funktioniert mit der Kombination
PHP-MySQL wunderbar.
Ein Teil der Daten wird mittels mcrypt (ofb) vor
dem Eintragen in die Datenbank verschlüsselt. Das und auch das
spätere Entschlüsseln funktioniert mit der Kombination
PHP-MySQL wunderbar.
Schön.
Nun habe ich das Problem, dass ich mit Access 2003 auf diese
verschlüsselten Daten zugreifen und sie auch bearbeiten muss.
verschlüsselten Daten zugreifen und sie auch bearbeiten muss.
Wer bist Du in Deiner Firma?
Praktikant?
Access ist per ODBC mit der MySQL verbunden und holt / schreibt auch
alle unverschlüsselten Daten. Wie kann ich nun die
verschlüsselten Daten in Access lesbar machen?
alle unverschlüsselten Daten. Wie kann ich nun die
verschlüsselten Daten in Access lesbar machen?
Mit der Funktion mcrypt.
An ein
Zurückschreiben in die MySQL-Datenbank denke ich dabei
zunächst noch gar nicht.
Zurückschreiben in die MySQL-Datenbank denke ich dabei
zunächst noch gar nicht.
Würde aber auch gehen.
Lonesome Walker
Na hoffentlich bringst Du Geduld mit...
Lonesome Walker
Lonesome Walker
Moin pagerank0,
zugegeben, ich muss da (im Gegensatz zu LSW) mangels Erfahrung ein bisschen den gesunden Menschenverstand bemühen bzw -ehrlicher ausgedrückt- im Nebel stochern.
Aber im Finden von Workarounds habe ich mittlerweile schon etwas Übung.
Also Anmerkung 1)
Wenn ich schon meine DB-Daten verschlüsseln wollte oder müsste, dann würde ich eher lachend in die Kreissäge springen als das mit irgendeinem Codeschnipsel außerhalb der jeweiligen DB-Möglichkeiten machen.
Das Konzept einer Datenbank ist doch gerade, dass ich die Daten unabhängig von irgendeinem Programm interpretieren können möchte.
Jedes halbwegs zeitgemäße DB-Blech bringt Verschlüsselungsmöglichkeiten mit, so auch MySQL ( siehe mySQL-Encryption-Functions ).
Abgesehen davon raten ja selbst eingefleischte PHP-Vertreter von der buggybuggybuggy-Funktion mcrypt-ofb() ab.
---> wenn du da mitziehen könntest, dass die DB-eigenen Verschlüsselungskrücken benutzt werden, dann spricht doch nichts dagegen, den Krams verschlüsselt zu speichern in der Tabelle und anderen Interessenten, z.B. Fremd-Frontends anzubieten unverschlüsselt in einem Eins-zu-Eins-View.
Im View kannst Du doch wieder die DB-Internen Decrypt-Routinen ansprechen.
Merkt doch keiner, der den View anzieht und berechtigt ist das Programm ja ohnehin zum Lesen der Daten.
Mal sehen, ob LSW mich jetzt auslacht... *gg
Grüße
Biber
zugegeben, ich muss da (im Gegensatz zu LSW) mangels Erfahrung ein bisschen den gesunden Menschenverstand bemühen bzw -ehrlicher ausgedrückt- im Nebel stochern.
Aber im Finden von Workarounds habe ich mittlerweile schon etwas Übung.
Also Anmerkung 1)
Wenn ich schon meine DB-Daten verschlüsseln wollte oder müsste, dann würde ich eher lachend in die Kreissäge springen als das mit irgendeinem Codeschnipsel außerhalb der jeweiligen DB-Möglichkeiten machen.
Das Konzept einer Datenbank ist doch gerade, dass ich die Daten unabhängig von irgendeinem Programm interpretieren können möchte.
Jedes halbwegs zeitgemäße DB-Blech bringt Verschlüsselungsmöglichkeiten mit, so auch MySQL ( siehe mySQL-Encryption-Functions ).
Abgesehen davon raten ja selbst eingefleischte PHP-Vertreter von der buggybuggybuggy-Funktion mcrypt-ofb() ab.
---> wenn du da mitziehen könntest, dass die DB-eigenen Verschlüsselungskrücken benutzt werden, dann spricht doch nichts dagegen, den Krams verschlüsselt zu speichern in der Tabelle und anderen Interessenten, z.B. Fremd-Frontends anzubieten unverschlüsselt in einem Eins-zu-Eins-View.
Im View kannst Du doch wieder die DB-Internen Decrypt-Routinen ansprechen.
Merkt doch keiner, der den View anzieht und berechtigt ist das Programm ja ohnehin zum Lesen der Daten.
Mal sehen, ob LSW mich jetzt auslacht... *gg
Grüße
Biber
@Biber:
Du hast ihm seine Frage nicht beantwortet, sondern lediglich einen Workaround geliefert, wie er es besser machen könnte :-p
Stellt sich die Frage, wie er es jetzt macht, MySQL über PHP(ODBC) mit Access zu verbinden (ODBC Access<->MySQL wird da ja leider nix bringen; vielleicht sieht er das ja mal ein...)
Oh, und dann könnte es EVENTUELL zu Problemen kommen, wenn Access mit PHP angesprochen werden soll...
(je nachdem, WIE man das macht, könnten da lustige Ergebnisse rauskommen...)
Aber deswegen habe ich ja gefragt, welche Position er in seinem Unternehmen bekleidet...
Ist er Praktikant -> Chef sagen, geht nicht (schnell, schmerzlos, einfach)
Ist er leitender Angestellter -> sagen, kostet viel Geld (erledigt sich auch sehr schnell)
Ist er aber Cheffe -> der Firma, die diesen Murks verbogen hat, sagen, sie sollen das fristgerecht wieder stramm ziehen
Wie Du ja schon treffend angemerkt hast, war der URGEDANKE von Datenbanken Unabhängigkeit.
Wenn man sich dann aber freiwillig geißeln läßt, dann darf man sich nicht über seine masochistische Ader in einem öffentlichen Forum beschweren :-p
@threadstarter:
einer Deiner Befehlsfreunde wird:
werden, nicht vergessen...
Lonesome Walker
Du hast ihm seine Frage nicht beantwortet, sondern lediglich einen Workaround geliefert, wie er es besser machen könnte :-p
Stellt sich die Frage, wie er es jetzt macht, MySQL über PHP(ODBC) mit Access zu verbinden (ODBC Access<->MySQL wird da ja leider nix bringen; vielleicht sieht er das ja mal ein...)
Oh, und dann könnte es EVENTUELL zu Problemen kommen, wenn Access mit PHP angesprochen werden soll...
(je nachdem, WIE man das macht, könnten da lustige Ergebnisse rauskommen...)
Aber deswegen habe ich ja gefragt, welche Position er in seinem Unternehmen bekleidet...
Ist er Praktikant -> Chef sagen, geht nicht (schnell, schmerzlos, einfach)
Ist er leitender Angestellter -> sagen, kostet viel Geld (erledigt sich auch sehr schnell)
Ist er aber Cheffe -> der Firma, die diesen Murks verbogen hat, sagen, sie sollen das fristgerecht wieder stramm ziehen
Wie Du ja schon treffend angemerkt hast, war der URGEDANKE von Datenbanken Unabhängigkeit.
Wenn man sich dann aber freiwillig geißeln läßt, dann darf man sich nicht über seine masochistische Ader in einem öffentlichen Forum beschweren :-p
@threadstarter:
einer Deiner Befehlsfreunde wird:
odbc_close($connection);
werden, nicht vergessen...
Lonesome Walker
@lonesome Walker
<OT>
Das erlebe ich ja auch jeden Tag in "Batch & Shell", wenn jemand mit Tunnelblick seine Frage auf ein "Wo ist der Tippfehler in meinem Skript?" reduziert
Abgesehen davon - du beschränkst dich ja auch gottseidank nicht nur auf die buchstabengetreue Abarbeitung der Frage...
Grüße
Biber
</OT>
<OT>
Zitat von @16568:
@Biber:
Du hast ihm seine Frage nicht beantwortet, sondern lediglich einen Workaround geliefert, wie er es besser machen könnte
Meiner Einschätzung nach greift aber auch oft das wortwörtliche Beantworten der gestellten eigentlichen Frage zu kurz.@Biber:
Du hast ihm seine Frage nicht beantwortet, sondern lediglich einen Workaround geliefert, wie er es besser machen könnte
Das erlebe ich ja auch jeden Tag in "Batch & Shell", wenn jemand mit Tunnelblick seine Frage auf ein "Wo ist der Tippfehler in meinem Skript?" reduziert
Abgesehen davon - du beschränkst dich ja auch gottseidank nicht nur auf die buchstabengetreue Abarbeitung der Frage...
Grüße
Biber
</OT>
Moin pagerank0,
na ja, Teil 1 der Ansprache war das Verwenden der Built-In-Functions AES_Decrypt() etc.
Teil 2 war eigentlich das Bereitstellen eines "unverschlüsselten" Views für die ACCESS-Lese-Belange.
Ich hatte es so verstanden, dass dieser Zugriff via Access vorrangig zum Lesen gedacht war.
Also sollte doch irgendetwas a la
dafür reichen.
Selbst das Suchen nach Werten sollte ja keine Probleme machen, da jede/r User/In natürlicherweise nach lesbaren, unverschlüsselten Werten Ausschau hält.
Für den zweiten Fall, dass Du auch INSERTs und UPDATEs benötigst --- hmm, sicherlich gibt es da bestimmt auch einfache Lösungen, aber da verweise ich auf LSW.
Ich würde (vollkommen naiv und ohne Erfahrung mit dieser Konstellation) das Schreiben von "neuen" Daten entweder via Stored Procedure abfackeln oder mit einer Zwischentabelle und Triggern.
Also so oder so Serverseitig auf dem DB-Blech und nicht irgendwie mit geliehenen Schlüsseln auf der Frontend-Access-Seite.
Access sollte im Idealfall ja eben keinen Schlüssel für AES_Decrypt() o.ä. "kennen" müssen. Die Access-Appz hat das Leserecht, ist authentifiziert dadurch, dass sie überhaupt eine Connection gegen das mySQl-Blech aufmachen darf und welcher User das auf Clientseite starten darf, das habt ihr ja in der Hand.
Aber da halte ich mich erstmal zurück und warte ab, ob denn bei dir bzw. deiner Appz mehr als LESEN nötig ist.
Grüße
Biber
na ja, Teil 1 der Ansprache war das Verwenden der Built-In-Functions AES_Decrypt() etc.
Teil 2 war eigentlich das Bereitstellen eines "unverschlüsselten" Views für die ACCESS-Lese-Belange.
Ich hatte es so verstanden, dass dieser Zugriff via Access vorrangig zum Lesen gedacht war.
Also sollte doch irgendetwas a la
CREATE VIEW ReadView4Access (meineSpalte1, ...meinespalteN)
AS
SELECT AES_DECRYPT(data1, 'irgendeinschluessel') ,
....
SELECT AES_DECRYPT(dataN, 'irgendeinschluessel') ,
Selbst das Suchen nach Werten sollte ja keine Probleme machen, da jede/r User/In natürlicherweise nach lesbaren, unverschlüsselten Werten Ausschau hält.
Für den zweiten Fall, dass Du auch INSERTs und UPDATEs benötigst --- hmm, sicherlich gibt es da bestimmt auch einfache Lösungen, aber da verweise ich auf LSW.
Ich würde (vollkommen naiv und ohne Erfahrung mit dieser Konstellation) das Schreiben von "neuen" Daten entweder via Stored Procedure abfackeln oder mit einer Zwischentabelle und Triggern.
Also so oder so Serverseitig auf dem DB-Blech und nicht irgendwie mit geliehenen Schlüsseln auf der Frontend-Access-Seite.
Access sollte im Idealfall ja eben keinen Schlüssel für AES_Decrypt() o.ä. "kennen" müssen. Die Access-Appz hat das Leserecht, ist authentifiziert dadurch, dass sie überhaupt eine Connection gegen das mySQl-Blech aufmachen darf und welcher User das auf Clientseite starten darf, das habt ihr ja in der Hand.
Aber da halte ich mich erstmal zurück und warte ab, ob denn bei dir bzw. deiner Appz mehr als LESEN nötig ist.
Grüße
Biber
Moin pagerank0,
danke für die Rückmeldung und freut mich natürlich, wenn es so klappt, wie ich es als Theoretiker angegangen wäre.
Fairerweise: ich weiss wirklich nicht, ob es einen besseren, stabileren oder einen breiter ausgetretenen Pfad zu einer Lösung gibt.
Falls also irgendjemand bei dir vorbeschaut und fragt :"Wieso hast du es nicht einfach so und so gemacht...?" ,
dann bitte ihn doch, die Alternative noch hier zu ergänzen.
Grüße
Biber
danke für die Rückmeldung und freut mich natürlich, wenn es so klappt, wie ich es als Theoretiker angegangen wäre.
Fairerweise: ich weiss wirklich nicht, ob es einen besseren, stabileren oder einen breiter ausgetretenen Pfad zu einer Lösung gibt.
Falls also irgendjemand bei dir vorbeschaut und fragt :"Wieso hast du es nicht einfach so und so gemacht...?" ,
dann bitte ihn doch, die Alternative noch hier zu ergänzen.
Grüße
Biber