In der Kryptografie mit öffentlichem Schlüssel ist ein Fingerabdruck mit öffentlichem Schlüssel eine kurze Folge von Bytes, die zum Identifizieren eines längeren öffentlichen Schlüssels verwendet wird.
Insbesondere in SSH können sie verwendet werden, um zu überprüfen, ob es sich bei einem Server tatsächlich um den Server handelt, mit dem ich voraussichtlich kommunizieren und auf den kein Man-in-the-Middle-Angriff abzielt.
Sie werden in der Regel als hexadezimale Ziffernfolge dargestellt, daher kann es ziemlich langweilig und mühsam sein, sie mit dem erwarteten Fingerabdruck zu vergleichen:
37:e4:6a:2d:48:38:1a:0a:f3:72:6d:d9:17:6b:bd:5e
Zur Vereinfachung hat OpenSSH eine Methode zur Visualisierung von Fingerabdrücken als ASCII-Grafik eingeführt, die wie folgt aussehen würde:
+-----------------+
| |
| |
| . |
| . o |
|o . o . S + |
|.+ + = . B . |
|o + + o B o E |
| o . + . o |
| .o |
+-----------------+
Damit könnte ich versuchen, mich an die raue Form der ASCII-Grafik zu erinnern, und sie dann (theoretisch) erkennen, wenn sich der Fingerabdruck des Servers ändert und das Bild anders aussieht.
Wie es funktioniert
Das Raster hat eine Breite von 17 Zeichen und eine Höhe von 9 Zeichen. Der "Bischof" beginnt in Zeile 4 / Spalte 8 (in der Mitte). Jede Position kann als [x, y] bezeichnet werden, dh [8,4] für die Startposition des Bischofs.
1111111
01234567890123456
+-----------------+
0| |
1| |
2| |
3| |
4| S |
5| |
6| |
7| |
8| |
+-----------------+
Der Bischof benutzt den Fingerabdruck, um sich zu bewegen. Es liest es byteweise von links nach rechts und vom niedrigstwertigen bis zum höchstwertigen Bit:
Fingerprint 37 : e4 : 6a : ... : 5e
Bits 00 11 01 11 : 11 10 01 00 : 01 10 10 10 : ... : 01 01 11 10
| | | | | | | | | | | | | | | |
Step 4 3 2 1 8 7 6 5 12 11 10 9 64 63 62 61
Der Bischof wird sich nach folgendem Plan bewegen:
Bits Direction
-----------------
00 Up/Left
01 Up/Right
10 Down/Left
11 Down/Right
Sonderfälle:
- Wenn der Bischof in einer Ecke ist und wieder in die Ecke ziehen würde, bewegt er sich überhaupt nicht. Dh: Der Bischof ist bei
[0,0]
und sein nächster Schritt wäre00
. Er bleibt bei[0,0]
- Befindet sich der Bischof in einer Ecke oder an einer Wand und würde er in eine der Wände einziehen, bewegt er sich nur horizontal oder vertikal. Dh: Der Bischof ist bei
[0,5]
und sein nächster Schritt wäre01
. Er kann nicht nach links gehen, also bewegt er sich einfach nach oben[0,4]
.
Jede Position enthält einen Wert dafür, wie oft der Bischof dieses Feld besucht hat:
Value | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12| 13| 14| 15| 16|
Character | | . | o | + | = | * | B | O | X | @ | % | & | # | / | ^ | S | E |
Die Werte 15 (S) und 16 (E) sind insofern besonders, als sie die Start- und Endposition des Bischofs markieren und den tatsächlichen Wert der jeweiligen Position überschreiben.
Tor
Erstellen Sie ein Programm, das einen alphanumerischen Fingerabdruck als Eingabe verwendet und dessen ASCII-Grafikdarstellung wie in den Beispielen gezeigt erstellt.
Beispiele
Input:
16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48
Output:
+-----------------+
| . |
| + . |
| . B . |
| o * + |
| X * S |
| + O o . . |
| . E . o |
| . . o |
| . . |
+-----------------+
Input:
b6:dd:b7:1f:bc:25:31:d3:12:f4:92:1c:0b:93:5f:4b
Output:
+-----------------+
| o.o |
| .= E.|
| .B.o|
| .= |
| S = .|
| . o . .= |
| . . . oo.|
| . o+|
| .o.|
+-----------------+
Input:
05:1e:1e:c1:ac:b9:d1:1c:6a:60:ce:0f:77:6c:78:47
Output:
+-----------------+
| o=. |
| o o++E |
| + . Ooo. |
| + O B.. |
| = *S. |
| o |
| |
| |
| |
+-----------------+
Regeln
- Das ist Code-Golf . Der Code mit den wenigsten Bytes gewinnt.
- Sie können keine vorhandene Bibliothek verwenden, die das Bild erzeugt.
- Verwenden Sie die Sprache, die Sie bevorzugen!
- Ihre Einreichung muss ein vollständiges Programm sein
33:33:33:...:33
, cc:cc:cc:...:cc
wären Beispiele dafür. Der Fingerabdruck ist normalerweise ein MD5-Hash, daher ist es sehr unwahrscheinlich, dass Sie ein solches Ergebnis erhalten. Ich habe keine verlässlichen Quellen gefunden, um mit diesen umzugehen. Deshalb