Verfügt Python über eine integrierte, einfache Methode zum Codieren / Decodieren von Zeichenfolgen mithilfe eines Kennworts?
Etwas wie das:
>>> encode('John Doe', password = 'mypass')
'sjkl28cn2sx0'
>>> decode('sjkl28cn2sx0', password = 'mypass')
'John Doe'
Die Zeichenfolge "John Doe" wird also als "sjkl28cn2sx0" verschlüsselt. Um die ursprüngliche Zeichenfolge zu erhalten, würde ich diese Zeichenfolge mit dem Schlüssel 'mypass' "entsperren", der ein Kennwort in meinem Quellcode ist. Ich möchte, dass ich auf diese Weise ein Word-Dokument mit einem Kennwort verschlüsseln / entschlüsseln kann.
Ich möchte diese verschlüsselten Zeichenfolgen als URL-Parameter verwenden. Mein Ziel ist die Verschleierung, nicht die starke Sicherheit. Es wird nichts Missionskritisches verschlüsselt. Mir ist klar, dass ich eine Datenbanktabelle zum Speichern von Schlüsseln und Werten verwenden könnte, aber ich versuche, minimalistisch zu sein.
quelle
Antworten:
Angenommen, Sie suchen nur nach einer einfachen Verschleierung, die die Dinge für den sehr zufälligen Beobachter verdeckt , und Sie möchten keine Bibliotheken von Drittanbietern verwenden. Ich würde so etwas wie die Vigenere-Chiffre empfehlen. Es ist eine der stärksten der einfachen alten Chiffren.
Vigenère-Chiffre
Es ist schnell und einfach zu implementieren. Etwas wie:
Die Dekodierung ist ziemlich gleich, außer dass Sie den Schlüssel subtrahieren.
Es ist viel schwieriger zu brechen, wenn die von Ihnen codierten Zeichenfolgen kurz sind und / oder wenn es schwierig ist, die Länge der verwendeten Passphrase zu erraten.
Wenn Sie nach etwas Kryptografischem suchen, ist PyCrypto wahrscheinlich die beste Wahl, obwohl frühere Antworten einige Details übersehen: Der EZB-Modus in PyCrypto erfordert, dass Ihre Nachricht ein Vielfaches von 16 Zeichen lang ist. Also musst du auffüllen. Wenn Sie sie auch als URL-Parameter verwenden möchten, verwenden Sie
base64.urlsafe_b64_encode()
anstelle des Standardparameters. Dies ersetzt einige der Zeichen im base64-Alphabet durch URL-sichere Zeichen (wie der Name schon sagt).Sie sollten jedoch ABSOLUT sicher sein, dass diese sehr dünne Verschleierungsschicht für Ihre Bedürfnisse ausreicht, bevor Sie diese verwenden. Der Wikipedia-Artikel, auf den ich verlinkt habe, enthält detaillierte Anweisungen zum Brechen der Chiffre, sodass jeder mit mäßiger Entschlossenheit sie leicht brechen kann.
quelle
'str' object cannot be interpreted as an integer
Da Sie ausdrücklich angeben, dass Sie Dunkelheit und nicht Sicherheit wünschen, werden wir es vermeiden, Sie wegen der Schwäche Ihrer Vorschläge zu tadeln :)
Verwenden von PyCrypto:
Wenn jemand Ihre Datenbank und Ihre Codebasis in den Griff bekommt, kann er die verschlüsselten Daten entschlüsseln. Schützen Sie sich
secret_key
!quelle
encrypt
Funktion ist Stateful dlitz.net/software/pycrypto/api/current/…, daher sollten Sie nicht versuchen, sie wiederzuverwenden.Python hat keine integrierten Verschlüsselungsschemata, nein. Sie sollten auch die verschlüsselte Datenspeicherung ernst nehmen. Triviale Verschlüsselungsschemata, die ein Entwickler als unsicher versteht, und ein Spielzeugschema können von einem weniger erfahrenen Entwickler durchaus als sicheres Schema verwechselt werden. Wenn Sie verschlüsseln, verschlüsseln Sie ordnungsgemäß.
Sie müssen jedoch nicht viel arbeiten, um ein ordnungsgemäßes Verschlüsselungsschema zu implementieren. Zunächst einmal nicht neu erfinden das Rad Kryptographie , verwenden Sie eine vertrauenswürdige Kryptographie - Bibliothek dies für Sie zu behandeln. Für Python 3 ist diese vertrauenswürdige Bibliothek
cryptography
.Ich empfehle auch, dass die Ver- und Entschlüsselung für Bytes gilt . zuerst Textnachrichten in Bytes codieren;
stringvalue.encode()
codiert in UTF8 und kann mit einfach wieder zurückgesetzt werdenbytesvalue.decode()
.Last but not least sprechen wir beim Ver- und Entschlüsseln von Schlüsseln , nicht von Passwörtern. Ein Schlüssel sollte nicht menschlich einprägsam sein. Er wird an einem geheimen Ort gespeichert, ist jedoch maschinenlesbar, während ein Kennwort häufig von Menschen lesbar und gespeichert werden kann. Mit ein wenig Sorgfalt können Sie einen Schlüssel aus einem Passwort ableiten.
Für eine Webanwendung oder einen Prozess, der in einem Cluster ohne menschliche Aufmerksamkeit ausgeführt wird, um ihn weiterhin auszuführen, möchten Sie einen Schlüssel verwenden. Passwörter gelten, wenn nur ein Endbenutzer Zugriff auf die spezifischen Informationen benötigt. Selbst dann sichern Sie die Anwendung normalerweise mit einem Kennwort und tauschen dann verschlüsselte Informationen mit einem Schlüssel aus, der möglicherweise an das Benutzerkonto angehängt ist.
Symmetrische Schlüsselverschlüsselung
Fernet - AES CBC + HMAC, dringend empfohlen
Die
cryptography
Bibliothek enthält das Fernet-Rezept , ein Best-Practice-Rezept für die Verwendung von Kryptografie. Fernet ist ein offener Standard mit fertigen Implementierungen in einer Vielzahl von Programmiersprachen und bietet Ihnen AES CBC-Verschlüsselung mit Versionsinformationen, einem Zeitstempel und einer HMAC-Signatur, um Manipulationen an Nachrichten zu verhindern.Fernet macht es sehr einfach, Nachrichten und zu verschlüsseln und zu entschlüsseln Sie zu schützen. Es ist die ideale Methode, um Daten mit einem Geheimnis zu verschlüsseln.
Ich empfehle Ihnen
Fernet.generate_key()
, einen sicheren Schlüssel zu generieren. Sie können auch ein Kennwort verwenden (nächster Abschnitt), aber ein vollständiger 32-Byte-Geheimschlüssel (16 Byte zum Verschlüsseln plus weitere 16 Byte für die Signatur) ist sicherer als die meisten Kennwörter, die Sie sich vorstellen können.Der Schlüssel, den Fernet generiert, ist ein
bytes
Objekt mit URL- und dateisicheren Base64-Zeichen, also druckbar:Um Nachrichten zu verschlüsseln oder zu entschlüsseln, erstellen Sie eine
Fernet()
Instanz mit dem angegebenen Schlüssel und rufen Sie dasFernet.encrypt()
oder aufFernet.decrypt()
. Sowohl die zu verschlüsselnde Klartextnachricht als auch das verschlüsselte Token sindbytes
Objekte.encrypt()
unddecrypt()
Funktionen würden aussehen wie:Demo:
Fernet mit Passwort - Schlüssel vom Passwort abgeleitet, schwächt die Sicherheit etwas
Sie können ein Kennwort anstelle eines geheimen Schlüssels verwenden, vorausgesetzt, Sie verwenden eine Methode zur Ableitung eines starken Schlüssels . Sie müssen dann die Anzahl der Salt- und HMAC-Iterationen in die Nachricht aufnehmen, damit der verschlüsselte Wert nicht mehr mit Fernet kompatibel ist, ohne zuerst Salt, Count und Fernet-Token zu trennen:
Demo:
Das Einbeziehen des Salt in die Ausgabe ermöglicht die Verwendung eines zufälligen Salt-Werts, wodurch sichergestellt wird, dass die verschlüsselte Ausgabe unabhängig von der Wiederverwendung des Kennworts oder der Wiederholung von Nachrichten garantiert vollständig zufällig ist. Durch das Einbeziehen der Iterationszahl wird sichergestellt, dass Sie die CPU-Leistung im Laufe der Zeit anpassen können, ohne die Fähigkeit zu verlieren, ältere Nachrichten zu entschlüsseln.
Ein Passwort allein kann so sicher sein wie ein Fernet 32-Byte-Zufallsschlüssel, vorausgesetzt, Sie generieren ein richtig zufälliges Passwort aus einem Pool ähnlicher Größe. 32 Bytes ergeben 256 ^ 32 Schlüssel. Wenn Sie also ein Alphabet mit 74 Zeichen (26 obere, 26 untere, 10 Ziffern und 12 mögliche Symbole) verwenden, sollte Ihr Passwort mindestens
math.ceil(math.log(256 ** 32, 74))
== 42 Zeichen lang sein. Eine gut ausgewählte größere Anzahl von HMAC-Iterationen kann jedoch den Mangel an Entropie etwas mildern, da dies es für einen Angreifer viel teurer macht, sich brutal hineinzuzwingen.Wissen Sie nur, dass die Auswahl eines kürzeren, aber dennoch einigermaßen sicheren Passworts dieses Schema nicht lähmt, sondern nur die Anzahl der möglichen Werte verringert, die ein Brute-Force-Angreifer durchsuchen müsste. Stellen Sie sicher, dass Sie ein Kennwort auswählen, das Ihren Sicherheitsanforderungen entspricht .
Alternativen
Verschleierung
Eine Alternative ist nicht zu verschlüsseln . Seien Sie nicht versucht, nur eine Verschlüsselung mit geringer Sicherheit oder eine hausgemachte Implementierung von beispielsweise Vignere zu verwenden. Diese Ansätze bieten keine Sicherheit, können jedoch einem unerfahrenen Entwickler, der die Aufgabe hat, Ihren Code in Zukunft zu verwalten, die Illusion von Sicherheit geben, die schlimmer ist als gar keine Sicherheit.
Wenn Sie nur Dunkelheit benötigen, geben Sie einfach die Daten ein. Für URL-sichere Anforderungen ist die
base64.urlsafe_b64encode()
Funktion in Ordnung. Verwenden Sie hier kein Passwort, codieren Sie einfach und Sie sind fertig. Fügen Sie höchstens eine Komprimierung hinzu (wiezlib
):Dies wird
b'Hello world!'
zub'eNrzSM3JyVcozy_KSVEEAB0JBF4='
.Nur Integrität
Wenn Sie nur sicherstellen müssen, dass die Daten unverändert bleiben, nachdem sie an einen nicht vertrauenswürdigen Client gesendet und zurück empfangen wurden, möchten Sie die Daten signieren. Sie können die
hmac
Bibliothek hierfür mit SHA1 verwenden (noch) als sicher für die HMAC-Signatur angesehen ) oder besser:Verwenden Sie diese Option, um Daten zu signieren, fügen Sie dann die Signatur den Daten hinzu und senden Sie diese an den Client. Wenn Sie die Daten zurückerhalten, teilen Sie Daten und Signatur auf und überprüfen Sie sie. Ich habe den Standardalgorithmus auf SHA256 gesetzt, daher benötigen Sie einen 32-Byte-Schlüssel:
Vielleicht möchten Sie sich die
itsdangerous
Bibliothek ansehen , die dies alles mit Serialisierung und De-Serialisierung in verschiedenen Formaten zusammenfasst.Verwendung der AES-GCM-Verschlüsselung zur Bereitstellung von Verschlüsselung und Integrität
Fernet baut auf AEC-CBC mit einer HMAC-Signatur auf, um die Integrität der verschlüsselten Daten sicherzustellen. Ein böswilliger Angreifer kann die Unsinndaten Ihres Systems nicht füttern, um Ihren Dienst in Kreisen mit schlechten Eingaben zu betreiben, da der Chiffretext signiert ist.
Die Blockverschlüsselung im Galois / Counter-Modus erzeugt Chiffretext und ein Tag für denselben Zweck und kann daher für dieselben Zwecke verwendet werden. Der Nachteil ist, dass es im Gegensatz zu Fernet kein einfach zu verwendendes Einheitsrezept gibt, das auf anderen Plattformen wiederverwendet werden kann. AES-GCM verwendet auch kein Auffüllen, daher entspricht dieser Verschlüsselungs-Chiffretext der Länge der Eingabenachricht (während Fernet / AES-CBC Nachrichten in Blöcke fester Länge verschlüsselt, wodurch die Nachrichtenlänge etwas verdeckt wird).
AES256-GCM verwendet das übliche 32-Byte-Geheimnis als Schlüssel:
dann benutze
Ich habe einen Zeitstempel eingefügt, um dieselben Time-to-Live-Anwendungsfälle zu unterstützen, die Fernet unterstützt.
Andere Ansätze auf dieser Seite in Python 3
AES CFB - wie CBC, jedoch ohne Pad
Dies ist der Ansatz, dem All І s Vаиітy folgt, wenn auch falsch. Dies ist die
cryptography
Version, aber beachten Sie, dass ich die IV in den Chiffretext einbeziehe . Sie sollte nicht als global gespeichert werden (die Wiederverwendung einer IV schwächt die Sicherheit des Schlüssels, und das Speichern als globales Modul bedeutet, dass sie neu generiert wird der nächste Python-Aufruf, der den gesamten Chiffretext unverschlüsselbar macht):Diesem fehlt die zusätzliche Panzerung einer HMAC-Signatur, und es gibt keinen Zeitstempel. Sie müssten diese selbst hinzufügen.
Das Obige zeigt auch, wie einfach es ist, grundlegende Kryptographie-Bausteine falsch zu kombinieren. Die falsche Behandlung des IV-Werts durch Vаиітy kann zu einer Datenverletzung führen oder dazu, dass alle verschlüsselten Nachrichten nicht lesbar sind, weil die IV verloren geht. Die Verwendung von Fernet schützt Sie stattdessen vor solchen Fehlern.
AES EZB - nicht sicher
Wenn Sie zuvor die AES-EZB-Verschlüsselung implementiert haben und diese in Python 3 weiterhin unterstützen müssen, können Sie dies auch weiterhin tun
cryptography
. Die gleichen Einschränkungen gelten, EZB ist nicht sicher genug für reale Anwendungen . Implementieren Sie diese Antwort für Python 3 erneut und fügen Sie die automatische Behandlung des Auffüllens hinzu:Auch hier fehlt die HMAC-Signatur, und Sie sollten die EZB sowieso nicht verwenden. Das Obige dient lediglich der Veranschaulichung, dass
cryptography
die gängigen kryptografischen Bausteine verarbeitet werden können, auch diejenigen, die Sie eigentlich nicht verwenden sollten.quelle
Das in der Vigenere- Verschlüsselungsantwort von @ smehmood erwähnte "encoded_c" sollte "key_c" sein.
Hier arbeiten Codierungs- / Decodierungsfunktionen.
Haftungsausschluss: Wie aus den Kommentaren hervorgeht, sollte dies nicht zum Schutz von Daten in einer realen Anwendung verwendet werden, es sei denn, Sie lesen dies und haben nichts dagegen, mit Anwälten zu sprechen:
Was ist falsch an der XOR-Verschlüsselung?
quelle
encodedmsg = encode('mypassword', 'this is the message éçàèç"')
print encodedmsg
print decode('mypassword', encodedmsg)
Es funktioniert gut.Hier ist eine Python 3-Version der Funktionen aus @qneills Antwort :
Die zusätzlichen Codierungen / Decodierungen werden benötigt, da Python 3 Zeichenfolgen / Byte-Arrays in zwei verschiedene Konzepte aufgeteilt und ihre APIs aktualisiert hat, um dies widerzuspiegeln.
quelle
.encode()).decode()
. in der Rückkehr vonencode()
und.decode()
in der zweiten Zeile indecode()
.Haftungsausschluss: Wie in den Kommentaren erwähnt, sollte dies nicht zum Schutz von Daten in einer realen Anwendung verwendet werden.
Was ist falsch an der XOR-Verschlüsselung?
/crypto/56281/breaking-a-xor-cipher-of-known-key-length
https://github.com/hellman/xortool
Wie bereits erwähnt, enthält die PyCrypto-Bibliothek eine Reihe von Chiffren. Die XOR "Chiffre" kann verwendet werden, um die Drecksarbeit zu erledigen, wenn Sie es nicht selbst tun möchten:
Die Chiffre funktioniert wie folgt, ohne den Klartext auffüllen zu müssen:
Dank an https://stackoverflow.com/a/2490376/241294 für die Base64-Codierungs- / Decodierungsfunktionen (ich bin ein Python-Neuling).
quelle
sudo pip3 install pycrypto
.Hier ist eine Implementierung der URL-sicheren Ver- und Entschlüsselung mit AES (PyCrypto) und base64.
Wenn Sie auf ein Problem wie dieses stoßen,
TypeError: character mapping must return integer, None or unicode
verwenden Sie https://bugs.python.org/issue4329 ( )str(cipher)
beim Dekodieren Folgendes:Prüfung:
quelle
TypeError: Object type <class 'str'> cannot be passed to C code
.b'...'
, habe ich die Antwort für zukünftige Referenz bearbeitet!Funktionierende Codierungs- / Decodierungsfunktionen in Python3 (nur sehr wenig von qneills Antwort angepasst):
quelle
Vielen Dank für einige tolle Antworten. Nichts Originelles zum Hinzufügen, aber hier sind einige progressive Änderungen der Antwort von qneill unter Verwendung einiger nützlicher Python-Funktionen. Ich hoffe, Sie stimmen zu, dass sie den Code vereinfachen und klarstellen.
quelle
Wenn Sie sicher sein möchten, können Sie Fernet verwenden, das kryptografisch einwandfrei ist. Sie können ein statisches "Salz" verwenden, wenn Sie es nicht separat aufbewahren möchten - Sie verlieren nur die Verhinderung von Wörterbuch- und Regenbogenangriffen. Ich habe es gewählt, weil ich lange oder kurze Passwörter auswählen kann, was mit AES nicht so einfach ist.
Wenn das zu kompliziert ist, hat jemand eine einfache Verschlüsselung vorgeschlagen
quelle
Wer auch immer hierher kam (und der Bountier), schien nach Einzeilern mit wenig Setup zu suchen, die andere Antworten nicht liefern. Also schlage ich base64 vor.
Denken Sie jetzt daran, dass dies nur eine grundlegende Verschleierung ist und in ** KEINER WEISE FÜR SICHERHEIT ** in Ordnung ist , aber hier sind einige Einzeiler:
Ein paar Dinge zu beachten:
bytes()
undbytes::decode()
=
Zeichen. Leute wie ich gehen absolut darum herum, sie in der Javascript-Konsole zu dekodieren, wenn wir sie auf Websites sehen. Es ist so einfach wiebtoa(string)
(js)Wenn das, was Sie wollten, nicht einmal einen Schlüssel irgendeiner Art, sondern nur eine Verschleierung benötigte, können Sie noch einmal base64 ohne Schlüssel verwenden:
quelle
Fernet(key).encrypt(message)
ist nur ein Ausdruck, genau wie Ihr base64-Aufruf.key
. Viele Entwickler werden aus Stack Overflow kopieren und einfügen, ohne darauf zu achten, und davon ausgehen, dass der Schlüssel geheim ist. Wenn Sie es einschließen müssen, verwenden Sie es zumindest nicht und warnen oder lösen Sie eine Ausnahme aus, wenn Sie es trotzdem verwenden. Unterschätzen Sie nicht die Dummheit der Copy-and-Paste-Kultur und Ihre Verantwortung, vernünftige Funktionen bereitzustellen.Ich werde 4 Lösungen geben:
1) Verwenden der Fernet-Verschlüsselung mit
cryptography
BibliothekHier ist eine Lösung mit dem Paket
cryptography
, die Sie wie gewohnt installieren könnenpip install cryptography
:Sie können sich mit Ihrem eigenen Salz, Ihrer Iterationszahl usw. anpassen. Dieser Code ist nicht weit von der Antwort von @ HCLivess entfernt, aber das Ziel ist es, einsatzbereit zu sein
encrypt
unddecrypt
Funktionen zu haben. Quelle: https://cryptography.io/en/latest/fernet/#using-passwords-with-fernet .Hinweis: Verwenden Sie
.encode()
und.decode()
überall, wenn Sie Zeichenfolgen'John Doe'
anstelle von Bytes wie möchtenb'John Doe'
.2) Einfache AES-Verschlüsselung mit
Crypto
BibliothekDies funktioniert mit Python 3:
Hinweis: Sie können entfernen
base64.b64encode
und.b64decode
/ oder wenn Sie keine textlesbare Ausgabe wünschen und / oder wenn Sie den Chiffretext trotzdem als Binärdatei auf der Festplatte speichern möchten.3) AES mit einer besseren Funktion zur Ableitung von Passwortschlüsseln und der Möglichkeit zu testen, ob "falsches Passwort eingegeben" wurde, mit
Crypto
BibliothekDie Lösung 2) mit AES "CFB-Modus" ist in Ordnung, hat jedoch zwei Nachteile: Die Tatsache, dass
SHA256(password)
dies mit einer Nachschlagetabelle leicht brutal erzwungen werden kann und dass es keine Möglichkeit gibt, zu testen, ob ein falsches Passwort eingegeben wurde. Dies wird hier durch die Verwendung von AES im "GCM-Modus" gelöst, wie in AES erläutert : Wie erkennt man, dass ein falsches Passwort eingegeben wurde? und Ist diese Methode, um zu sagen, dass das eingegebene Passwort falsch ist, sicher? ::4) Verwenden von RC4 (keine Bibliothek erforderlich)
Angepasst von https://github.com/bozhu/RC4-Python/blob/master/rc4.py .
(Veraltet seit den letzten Änderungen, aber zur späteren Bezugnahme aufbewahrt): Ich hatte Probleme mit Windows + Python 3.6 + allen Antworten, die
pycrypto
( unter Windows nicht möglichpip install pycrypto
) oderpycryptodome
(die Antworten hier mitfrom Crypto.Cipher import XOR
fehlgeschlagen, weilXOR
diesepycrypto
Abzweigung nicht unterstützt wird ; und die lösungen mit auch... AES
fehlgeschlagen mitTypeError: Object type <class 'str'> cannot be passed to C code
). Außerdem hat die Bibliotheksimple-crypt
einepycrypto
Abhängigkeit, sodass dies keine Option ist.quelle
password_encrypt()
.Dies funktioniert, aber die Passwortlänge sollte genau sein
8
. Dies ist einfach und erfordert pyDes .AUSGABE:
quelle
Bei einer anderen Implementierung von @ qneill-Code, die die CRC-Prüfsumme der ursprünglichen Nachricht enthält, wird eine Ausnahme ausgelöst, wenn die Prüfung fehlschlägt:
quelle
Sie können AES verwenden, um Ihre Zeichenfolge mit einem Kennwort zu verschlüsseln. Sie sollten jedoch ein Kennwort wählen, das stark genug ist, damit die Leute nicht leicht erraten können, was es ist (Entschuldigung, ich kann nichts dagegen tun. Ich bin ein Möchtegern-Sicherheitsbeauftragter).
AES ist stark mit einer guten Schlüsselgröße, aber es ist auch einfach mit PyCrypto zu verwenden.
quelle
Externe Bibliotheken bieten Verschlüsselungsalgorithmen für geheime Schlüssel.
Das
Cypher
Modul in PyCrypto bietet beispielsweise eine Auswahl vieler Verschlüsselungsalgorithmen:Crypto.Cipher.AES
Crypto.Cipher.ARC2
Crypto.Cipher.ARC4
Crypto.Cipher.Blowfish
Crypto.Cipher.CAST
Crypto.Cipher.DES
Crypto.Cipher.DES3
Crypto.Cipher.IDEA
Crypto.Cipher.RC5
Crypto.Cipher.XOR
MeTooCrypto ist ein
Python
Wrapper für OpenSSL und bietet (unter anderem) eine umfassende Allzweck-Kryptografiebibliothek. Enthalten sind symmetrische Chiffren (wie AES).quelle
Wenn Sie eine sichere Verschlüsselung wünschen:
Für Python 2 sollten Sie keyczar verwenden. http://www.keyczar.org/
Für Python 3 habe ich, bis keyczar verfügbar ist, simple-crypt http://pypi.python.org/pypi/simple-crypt geschrieben
Beide verwenden eine Schlüsselverstärkung, wodurch sie sicherer sind als die meisten anderen Antworten hier. und da sie so einfach zu bedienen sind, möchten Sie sie vielleicht auch dann verwenden, wenn die Sicherheit nicht kritisch ist ...
quelle
Da also nichts Missionskritisches verschlüsselt wird und Sie nur zur Verschleierung verschlüsseln möchten .
Lassen Sie mich Caesers Chiffre präsentieren
Caesars Chiffre oder Caesar-Verschiebung ist eine der einfachsten und bekanntesten Verschlüsselungstechniken. Es handelt sich um eine Art Substitutions-Chiffre, bei der jeder Buchstabe im Klartext durch einen Buchstaben mit einer festen Anzahl von Positionen im Alphabet ersetzt wird. Zum Beispiel würde bei einer Linksverschiebung von 3 D durch A ersetzt, E würde B werden und so weiter.
Beispielcode als Referenz:
Vorteile: Es erfüllt Ihre Anforderungen und ist einfach und erledigt die Codierung "y".
Nachteil: Kann durch einfache Brute-Force-Algorithmen geknackt werden (höchst unwahrscheinlich, dass jemand versuchen würde, alle zusätzlichen Ergebnisse durchzugehen).
quelle
Hinzufügen eines weiteren Codes mit Decodierung und Codierung als Referenz
quelle