Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Durch PHP verschlüsselte Daten (mcrypt) in Access entschlüsseln

Frage Microsoft Microsoft Office

Mitglied: pagerank0

pagerank0 (Level 1) - Jetzt verbinden

31.10.2009 um 18:34 Uhr, 29568 Aufrufe, 12 Kommentare

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:
01.
<?  
02.
$key_value = "irgendeinschluessel"
03.
$data = "Daten im Klartext"
04.
$crypted_data = mcrypt_ofb(MCRYPT_DES, $key_value, $data, MCRYPT_ENCRYPT);  
05.
?>
Zum Entschlüsseln entsprechend:
01.
<?  
02.
$key_value = "irgendeinschluessel"
03.
$data = "die_kryptischen_zeichen_aus_der_datenbank"
04.
$decrypted_data = mcrypt_ofb(MCRYPT_DES, $key_value, $data, MCRYPT_DECRYPT);  
05.
?>
Bin für jeden Lösungsansatz offen und dankbar!

Gruß
pagerank0
Mitglied: 16568
31.10.2009 um 20:26 Uhr
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.

Schön.

Nun habe ich das Problem, dass ich mit Access 2003 auf diese
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?

Mit der Funktion mcrypt.

An ein
Zurückschreiben in die MySQL-Datenbank denke ich dabei
zunächst noch gar nicht.

Würde aber auch gehen.


Lonesome Walker
Bitte warten ..
Mitglied: pagerank0
01.11.2009 um 12:26 Uhr
Hallo Lonesome Walker,

vielen Dank für Deine überaus hilfreiche Antwort, aber ich warte doch lieber auf jemanden, der interessiert ist, nützliche Tipps zu geben.

Gruß
pagerank0
Bitte warten ..
Mitglied: 16568
01.11.2009 um 16:13 Uhr
Na hoffentlich bringst Du Geduld mit...


Lonesome Walker
Bitte warten ..
Mitglied: pagerank0
01.11.2009 um 21:37 Uhr
Geduld habe ich und -wenn die Lösung so einfach ist, dass man gar nicht danach fragen darf- auch die Hoffnung auf eine Antwort, die mich weiter bringt.
Bitte warten ..
Mitglied: Biber
02.11.2009 um 09:56 Uhr
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
Bitte warten ..
Mitglied: 16568
02.11.2009 um 10:18 Uhr
@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:

01.
odbc_close($connection);
werden, nicht vergessen...

Lonesome Walker
Bitte warten ..
Mitglied: Biber
02.11.2009 um 10:39 Uhr
@lonesome Walker
<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.
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>
Bitte warten ..
Mitglied: pagerank0
02.11.2009 um 19:54 Uhr
Hallo Biber und Danke für die ausführliche Antwort!

Ein Weg, wie ich es besser machen kann, ist mir natürlich noch lieber. Da nunmal die Kombination aus mcrypt und MySQL da war, stellte sich natürlich erstmal die Frage, ob man daraus in Verbindung mit Access was machen kann (die Daten per WebRequest über eine PHP-Datei zu holen oder eben die mcrypt-Funktion in VBA etc.), aber sinnvoller scheint es da wirklich zu sein, die SQL-eigene Funktion zu nutzen.

Habe das PHP-Script also mal abgeändert, sodass nicht mehr mcrypt genutzt wird, sondern die Daten über den SQL-Befehl mit AES_ENCRYPT / AES_DECRYPT ver-/entschlüsselt werden. Funktioniert beim Schreiben und Lesen der Daten mit PHP auch ohne Probleme. Wenn ich nun die Tabelle mittels ODBC mit Access verknüpfe und dort die SQL-Abfrage SELECT AES_DECRYPT(data, 'irgendeinschluessel') ausführe, meckert Access "Undefinierte Funktion 'AES_DECRYPT'. Wie Du merkst, arbeite ich sonst auf einem anderen Gebiet und hatte diesbezüglich mit Access nie großartig Berührungspunkte, wäre da also für einen Tipp dankbar.

Gruß
pagerank0
Bitte warten ..
Mitglied: Biber
02.11.2009 um 20:23 Uhr
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
01.
 CREATE VIEW  ReadView4Access (meineSpalte1, ...meinespalteN)  
02.
AS  
03.
SELECT AES_DECRYPT(data1, 'irgendeinschluessel') , 
04.
.... 
05.
SELECT AES_DECRYPT(dataN, 'irgendeinschluessel') , 
06.
 
....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
Bitte warten ..
Mitglied: pagerank0
02.11.2009 um 21:22 Uhr
Hi Biber,

prinzipiell würde erstmal ein View reichen, die Einträge, die von Access zurück zur MySQL-DB gehen, betreffen im Grunde nur unverschlüsselte Tabellen, nur beim Lesen sind einige verschlüsselte dabei. Werde es morgen so versuchen, wie Du geschrieben hast. Nochmals vielen Dank für die schnelle Hilfe!

Gruß
pagerank0
Bitte warten ..
Mitglied: pagerank0
04.11.2009 um 20:54 Uhr
Hallo nochmal,

wolte nur kurz Bescheid geben, dass das Problem gelöst ist, also Danke nochmal.

Gruß
pagerank0
Bitte warten ..
Mitglied: Biber
04.11.2009 um 21:04 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Festplatten, SSD, Raid

12TB written pro SSD in 2 Jahren mit RAID5 auf Hyper-VServer

Erfahrungsbericht von Lochkartenstanzer zum Thema Festplatten, SSD, Raid ...

Ähnliche Inhalte
PHP
PHP RFC: Mcrypt Extension wird ab PHP 7.2 entfernt

Information von Frank zum Thema PHP ...

Datenbanken
gelöst Eine Art Access, nur mit PHP und MySQL? (14)

Frage von McLion zum Thema Datenbanken ...

PHP
PHP Daten "Streamen" (3)

Frage von Roadrunner777 zum Thema PHP ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...