[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.
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!'
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
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