rot13 um eine log Datei zu verschlüsseln

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
JohnR
User
Beiträge: 23
Registriert: Freitag 25. Juni 2010, 19:42

Hallo

Ich möchte eine erzeugte log Datei verschlüsseln und dazu rot13 als System verwenden.
Das rot13 nicht das Maß der Dinge ist ist mir klar, aber es geht auch nur darum das nicht jeder unmittelbar an die Daten kommt falls sie ihm mal in die Hände fallen sollten.

"gelöst" habe ich das ganze mit meinen bescheidenen Pythonkenntnissen so

Code: Alles auswählen

message = ProtocolMsg(self.bl, None, "message", text.encode("UTF-8"))
            message.send(self)
	    file = open(self.logging(), "a") 
	    file.write('[log ] '.decode("rot13") + text.encode('utf-8').decode("rot13") + '[time ]'.decode("rot13") + time.strftime('%d.%m.%Y.%H.%M', time.gmtime()).decode("rot13") + '[IP ] '.decode("rot13") + self.getip().decode("rot13")  + '\n')
	    file.close()
nun habe ich aber den Effekt das die Zeitangabe und die IP-Angabe immer noch unverschlüsselt sind

Code: Alles auswählen

[ybt ] uv[gvzr ]11.07.2010.12.49[VC ] 89.250.196.127
was mache ich denn da jetzt falsch, oder ist rot13 dafür gar nicht geeignet da es nur Buchstaben versetzt ?


Gruß John
Benutzeravatar
DaMutz
User
Beiträge: 202
Registriert: Freitag 31. Oktober 2008, 17:25

Code: Alles auswählen

In [1]: "123456".decode("rot13")
Out[1]: u'123456'

In [2]: "abcdefg".decode("rot13")
Out[2]: u'nopqrst'
Zahlen werden nicht rotiert. Aber du kannst ja die rot13 Funktion mit Zahlen erweitern...
JohnR
User
Beiträge: 23
Registriert: Freitag 25. Juni 2010, 19:42

o.k. Danke

die Frage ist nur ob ich das kann :roll:

Gibt es einen besseren Weg also ein System wie rot13 was im standard verfügbar ist und die Zahlen auch mit rotiert ?
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

xor (müsstest du aber selber schreiben), base64, gzip ...

hth, Jörg
JohnR
User
Beiträge: 23
Registriert: Freitag 25. Juni 2010, 19:42

o.k. base64 sieht recht vielversprechend aus, werde damit mal etwas rumspielen.
JohnR
User
Beiträge: 23
Registriert: Freitag 25. Juni 2010, 19:42

habe mir jetzt mal

http://docs.python.org/library/base64.h ... _b64decode

zu Gemüte geführt, scheitere aber immer wieder schon an dem Beispiel.

Code: Alles auswählen

>>> import base64
>>> encoded = base64.b64encode('data to be encoded')
>>> encoded
'ZGF0YSB0byBiZSBlbmNvZGVk'
>>> data = base64.b64decode(encoded)
>>> data
'data to be encoded'
ich bekomme immer nur

Code: Alles auswählen

AttributeError: 'module' object has no attribute 'b64encode'
warum ?

liegt das daran das ich Python in Version 2.5 verwende ?

oder stelle ich mich einfach zu bl** an :K
BlackJack

Wie sieht denn `base64.__file__` aus? Hast Du vielleicht zufällig selber ein Modul mit dem Namen `base64.py` erstellt? *Das* hat die Funtkion dann ja wahrscheinlich nicht. ;-)
Benutzeravatar
DaMutz
User
Beiträge: 202
Registriert: Freitag 31. Oktober 2008, 17:25

Warum nicht so?

Code: Alles auswählen

In [1]: "abcdefgh12345".encode("base64")
Out[1]: 'YWJjZGVmZ2gxMjM0NQ==\n'
Spricht da etwas dagegen oder gibt es das nicht mit Python 2.5?
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Echte Kerle nehmen eh Kenny statt rot13.

*SCNR*
BlackJack

Aber bitte selber implementieren und nicht den furchtbaren Python-Code von der Seite verwenden.
JohnR
User
Beiträge: 23
Registriert: Freitag 25. Juni 2010, 19:42

hm o.k. mir hat einfach das Modul gefehlt :K

wenn ich das ganze jetzt aber auf das obige skript anwende

Code: Alles auswählen

file.write('[log ] '.encode("base64") + text.encode("base64") + '[time ]'.encode("base64") + time.strftime('%d.%m.%Y.%H.%M', time.gmtime()).encode("base64") + '[IP ] '.encode("base64") + self.getip().encode("base64")  + '\n')
bekomme ich das

Code: Alles auswählen

W2xvZyBdIA==
RGllcyBpc3QgZWluIFRlc3QgISQmPyAwODE1NDcxMg==
W3RpbWUgXQ==
MTIuMDcuMjAxMC4xOC4yOQ==
W0lQIF0g
OTIuMjUwLjE5Ni4xMjA=
wenn ich das dann wieder dekodiere bekomme ich dann das

Code: Alles auswählen

[log ] F–W2—7BV–âFW7BBcòƒSCs [time ]"ãrã#ã‚ã#�[IP ] 92.250.196.1
Das ist irgendwie nicht ganz Plaintext :shock:

Kann es sein das es daran liegt das ich alles einzeln ins base64 encode ?
BlackJack

Ja das liegt daran. Das hättest Du aber nun auch ziemlich einfach ausprobieren können.
JohnR
User
Beiträge: 23
Registriert: Freitag 25. Juni 2010, 19:42

ja aber wenn ich die ganze Datei als base64 dekodiere und sie wird beim nächsten log wieder geöffnet und wieder dekodiert, dann habe ich doch die vorhergehende Zeile doppelt dekodiert.

Also müßte ich doch bei dem Ansatz bleiben die Zeile einzeln als .base64 zu dekodieren.

Aber wie mache ich das

Code: Alles auswählen

file.write('[log ] '.encode("base64") + text.encode("base64") + '[time ]'.encode("base64") + time.strftime('%d.%m.%Y.%H.%M', time.gmtime()).encode("base64") + '[IP ] '.encode("base64") + self.getip().encode("base64")  + '\n')
funktioniert wenn auch alles andere als leicht wieder encodierbar

aber die ganze Zeile auf einmal, das bekomme ich irgendwie nicht hin :K

Also sorry das kann schon sein das das recht komische Fragen sind, aber ich hab mit Python noch "leicht" Probleme, was ja nicht heißen soll das ich mir keine Mühe gebe

Gruß John
BlackJack

@JohnR: Ich verstehe jetzt nicht wo das Problem ist!? Du musst die Zeile aus den Einzelteilen erstellen und die dann kodieren. Statt wie jetzt die Einzelteile zu kodieren und daraus die Zeile zu erstellen.
JohnR
User
Beiträge: 23
Registriert: Freitag 25. Juni 2010, 19:42

o.k. habs dann gelöst

ob nun gut oder schlecht das kann ich nicht wirklich beurteilen, aber es funktioniert :D

Code: Alles auswählen

file = open(self.logging(), "a")     
log = ('[log ] ' + text + '[time ]' + time.strftime('%d.%m.%Y.%H.%M', time.gmtime()) + '[IP ] ' + self.getip()  + '\n')
file.write(log.encode("base64"))
file.close()
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Jetzt willst du dir aber das `with`-Statement und `String formatting` anschaun.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Auch wenn's kein hilfreicher Beitrag zum Thema ist, möchte ich noch kurz anmerken, dass ich ein ungutes Gefühl bekomme, wenn ich "Verschlüsseln" und "rot13" in einem Satz lese. Auch wenn Gallier oder gegen wen Cäsar auch immer gekämpft haben möge vielleicht nicht in der Lage waren, einfache Verschiebechiffre zu dekodieren und dies daher ein Weg war, Truppenbefehle zu transportieren, heutzutage ist das ein Witz und die Verschlüsselung schon mit bloßem Auge zu erkennen. Wenn es darum geht, irgendwelche "persönlichen Daten" (IP-Adressen und so) verschlüsseln zu müssen, ist rot13 kein adäquates Mittel. Ich würde ein Verfahren mit einem "shared secret" wie RC4 oder AES128 empfehlen, wobei man dann natürlich sicherstellen muss, dass der geheime Schlüssel nicht in falsche Hände gerät. Er muss ja dem Programm, dass die Log-Dateien schreibt, bekannt sein (vielleicht enthalten sein) und so etwas kann man natürlich auch super-einfach aus einem Python-Programm ziehen. Landen jedoch die Log-Dateien auf einem anderen Rechner und der Rechner, der verschlüsselt, ist für den, der die Logs sehen kann, nicht einsehbar, ist auch der Schlüssel verborgen und es könnte sein, dass dieser Schutz dem notwendigen Datenschutz genügt. In keinem Fall sollte man jedoch anfangen, sich selbst irgendwelche "Verschlüsselungsverfahren" auszudenken.

Stefan
Antworten