Dans la cryptographie à clé publique, une empreinte de clé publique est une courte séquence d'octets utilisée pour identifier une clé publique plus longue.
Dans SSH en particulier, ils peuvent être utilisés pour vérifier qu'un serveur est bien le serveur avec lequel je m'attends à communiquer et que je ne suis pas ciblé par une attaque de type "man-in-the-middle".
Ils sont généralement représentés par une chaîne de chiffres hexadécimaux. Il peut donc être fastidieux et fastidieux de la comparer à l’empreinte digitale que j’attendrais:
37:e4:6a:2d:48:38:1a:0a:f3:72:6d:d9:17:6b:bd:5e
Pour faciliter les choses, OpenSSH a introduit une méthode de visualisation des empreintes digitales en tant qu’art ASCII, qui se présenterait ainsi:
+-----------------+
| |
| |
| . |
| . o |
|o . o . S + |
|.+ + = . B . |
|o + + o B o E |
| o . + . o |
| .o |
+-----------------+
Avec cela, je pourrais essayer de me rappeler la forme approximative de la technique ASCII et je la reconnaisrais (théoriquement) lorsque l’empreinte du serveur serait modifiée et que l’image serait différente.
Comment ça marche
La grille a une largeur de 17 caractères et une hauteur de 9 caractères. "L'évêque" commence à la ligne 4 / colonne 8 (le centre). Chaque position peut être notée [x, y], c'est-à-dire [8,4] pour la position de départ de l'évêque.
1111111
01234567890123456
+-----------------+
0| |
1| |
2| |
3| |
4| S |
5| |
6| |
7| |
8| |
+-----------------+
L'évêque utilise l'empreinte digitale pour se déplacer. Il le lit par octets de gauche à droite et du bit le moins significatif au bit le plus significatif:
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
L'évêque agira selon le plan suivant:
Bits Direction
-----------------
00 Up/Left
01 Up/Right
10 Down/Left
11 Down/Right
Cas spéciaux:
- Si l'évêque est dans un coin et bougerait de nouveau dans le coin, il ne bougera pas du tout. C'est-à-dire que l'évêque est à
[0,0]
et sa prochaine étape serait00
. Il reste à[0,0]
- Si l'évêque se trouve dans un coin ou contre un mur et se déplace dans l'un des murs, il se déplace uniquement horizontalement ou verticalement. C'est-à-dire que l'évêque est à
[0,5]
et sa prochaine étape serait01
. Il ne peut pas aller à gauche, alors il monte simplement[0,4]
.
Chaque position a une valeur de combien de fois l'évêque a visité ce champ:
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 |
Les valeurs 15 (S) et 16 (E) ont ceci de particulier qu'elles marquent respectivement la position de départ et d'arrivée de l'évêque et écrasent la valeur réelle de la position de respect.
Objectif
Créez un programme qui prend une empreinte alphanumérique en entrée et produit sa représentation graphique ASCII comme indiqué dans les exemples.
Exemples
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 |
| |
| |
| |
+-----------------+
Règles
- C'est du code-golf . Le code dans le moins d'octets gagne.
- Vous ne pouvez pas utiliser une bibliothèque existante qui produit l'image.
- Utilisez la langue que vous préférez!
- Votre soumission doit être un programme complet
33:33:33:...:33
, cc:cc:cc:...:cc
serait des exemples pour cela. L’empreinte digitale est généralement un hachage MD5, il est donc très peu probable que vous obteniez un tel résultat. Je n'ai trouvé aucune source fiable sur la manière de traiter ces problèmes, alors pour le moment, je dirais: supposons qu'aucune cellule ne sera visitée plus de 14 fois.