Caesar-Code (einschließlich Kanji) in Python

Caesar Code

[Caesar Code-Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%BC%E3%82%B6%E3%83%BC%E6%9A%97% E5% 8F% B7) Es ist eine primitive Verschlüsselungsmethode, die das Alphabet um die angegebene Anzahl von Zeichen verschiebt.

Implementierung (nur Alphabet / Nummer)

Nur für Alphabete und Zahlen können Sie ROT13 verwenden, eine in Python integrierte Funktion. Laut Wiki beträgt die Anzahl der Schichten in solchen Fällen traditionell 13. Wenn Sie den Wert auf 13 setzen, besteht das Alphabet aus 26 Zeichen. Es scheint also, dass dieselbe Funktion die Ver- und Entschlüsselung verarbeiten kann. (Weil ich herumgehen und zurückkommen werde)

import codecs
codecs.decode('Hello, World!', 'rot13')
# 'Uryyb, Jbeyq!'
codecs.decode('Uryyb, Jbeyq!', 'rot13')
# 'Hello, World!'

Implementierung (einschließlich Kanji)

Dieses Mal musste ich die Daten der Zeichenkette einschließlich Kanji maskieren, also habe ich es selbst gemacht. Zusätzlich zu der Einschränkung, dass Alphabete und Zahlen im Bereich von A bis Z, A bis Z, 0 bis 1 und Symbole wiederholt werden, werden sie nicht verschlüsselt. Ich musste die Daten aus religiösen Gründen mit Shift-Jis speichern, also habe ich es gemacht.

Es gibt jedoch die folgenden Einschränkungen.

Bitte beachten Sie, dass Kana-Kana-Kanji ein Code ist, der sich unabhängig von der Schlüsselnummer um ein Zeichen verschiebt. Der Grund wird später beschrieben.

def caesar(plaintext):
    key=13    # key:Nummer zum Verschieben des Zeichencodes für Alphabete und Zahlen
    enc="cp932"
    ciphertext = ""
    for ch in list(plaintext): #Scannen Sie Zeichen für Zeichen und verwenden Sie if-Minuten, um den Zeichentyp anhand der Zahl im Zeichencode zu bestimmen
        #Symbol
        if (' ' <= ch <= '/') or (':' <= ch <= '@') or ('[' <= ch <= '`') or ('{' <= ch <= '~') or ('、' <= ch <= '◯') :
            ciphertext +=chr(ord(ch))
        #A-Z
        elif 'A' <= ch <= 'Z':
            ciphertext += chr((ord(ch) - ord('A') + int(key)) % 26 + ord('A'))
        #a-z
        elif 'a' <= ch <= 'z':
            ciphertext += chr((ord(ch) - ord('a') + int(key)) % 26 + ord('a'))
        #0-9
        elif '0' <= ch <= '9':
            ciphertext += chr((ord(ch) - ord('0') + int(key)) % 10 + ord('0'))
        #Andere (Hiragana, Katakana, Kanji usw.)
        else:
            byte=bytearray(ch.encode(enc)) #Codieren Sie durch Angabe des Zeichencodes. Diese Ausgabe ist eine 2-Byte-Byte-Zeichenfolge. Konvertieren Sie sie daher vor der Verarbeitung in Bytearray
            while(1): #Bytes werden einzeln verschoben, bis das Zeichen den vorhandenen Zeichencode trifft.
                try:
                    try:
                        byte[-1]+=0x01  #Verschieben Sie den letzten Byte-Teil um 1 Bit.
                    except:
                        byte[-1]=0x00   #Überlegungsüberlegung. Setzen Sie das letzte Byte auf 00 zurück und erhöhen Sie das nächste Byte
                        byte[-2]+=0x01  
                    x=byte.decode(enc)  #Versuchen Sie, mit enc zu dekodieren, und erkennen Sie das Auftreten eines Fehlers
                except:
                    pass
                else:
                    break
            ciphertext += x
    return ciphertext

Ergänzung

Das Folgende ist ein Beispiel für einen Zeichencode, der kein Zeichen enthält. Wenn Sie beispielsweise beim Verschlüsseln von "Ein" versuchen, es nach dem Hinzufügen von +1 zum Zeichencode in ein Zeichen zu konvertieren, tritt ein Fehler auf, da das Zeichen nicht vorhanden ist. Aus diesem Grund haben wir die Operation zum Wiederholen von +1 hinzugefügt, bis der Zeichencode erreicht ist. In diesem Fall wird "on" zu "like". Diesmal gehe ich jedoch davon aus, dass der Verschiebungsbetrag 1 beträgt, sodass ich nichts weiter getan habe. Wenn Sie die Anzahl auf 2 oder mehr erhöhen möchten, wird "sowohl" Milch "als auch" Ein "verschlüsselt" angezeigt. Ändern Sie dies daher entsprechend. Aus diesem Grund ist Kana-Kana-Kanji ein Programm, das "nur eines daneben verschiebt", unabhängig von "der Anzahl der durch die Taste angegebenen Zeichen".

Recommended Posts

Caesar-Code (einschließlich Kanji) in Python
Schreiben Sie ein Caesar-Verschlüsselungsprogramm in Python
Erstellen und entschlüsseln Sie Caesar-Code mit Python
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Ich habe ein Caesar-Kryptografieprogramm in Python erstellt.
Täglicher AtCoder # 36 mit Python
Clustertext in Python
Täglicher AtCoder # 32 in Python
Täglicher AtCoder # 6 in Python
Täglicher AtCoder # 18 in Python
Bearbeiten Sie Schriftarten in Python
Singleton-Muster in Python
Dateioperationen in Python
Lesen Sie DXF mit Python
Täglicher AtCoder # 53 in Python
Tastenanschlag in Python
Verwenden Sie config.ini mit Python
Löse ABC168D in Python
Täglicher AtCoder # 7 in Python
LU-Zerlegung in Python