En la criptografía de clave pública, una huella digital de clave pública es una secuencia corta de bytes utilizada para identificar una clave pública más larga.
En SSH, en particular, se pueden usar para verificar que un servidor es de hecho el servidor con el que espero comunicarme y que no soy el objetivo de un ataque de hombre en el medio.
Por lo general, se representan como una cadena de dígitos hexadecimales, por lo que puede ser bastante aburrido y tedioso compararlo con la huella digital que esperaría:
37:e4:6a:2d:48:38:1a:0a:f3:72:6d:d9:17:6b:bd:5e
Para hacerlo un poco más fácil, OpenSSH ha introducido un método para visualizar huellas digitales como arte ASCII, que se vería así:
+-----------------+
| |
| |
| . |
| . o |
|o . o . S + |
|.+ + = . B . |
|o + + o B o E |
| o . + . o |
| .o |
+-----------------+
Con esto, podría tratar de recordar la forma aproximada del arte ASCII y luego (teóricamente) lo reconocería cuando la huella digital del servidor cambiara y la imagen se viera diferente.
Cómo funciona
La cuadrícula tiene un ancho de 17 caracteres y una altura de 9 caracteres. El "obispo" comienza en la fila 4 / columna 8 (el centro). Cada posición se puede denotar como [x, y], es decir, [8,4] para la posición inicial del obispo.
1111111
01234567890123456
+-----------------+
0| |
1| |
2| |
3| |
4| S |
5| |
6| |
7| |
8| |
+-----------------+
El obispo usa la huella digital para moverse. Lo lee en bytes de izquierda a derecha y del bit menos significativo al bit más significativo:
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
El obispo se moverá según el siguiente plan:
Bits Direction
-----------------
00 Up/Left
01 Up/Right
10 Down/Left
11 Down/Right
Casos especiales:
- Si el obispo está en una esquina y volvería a moverse hacia la esquina, no se mueve en absoluto. es decir: el obispo está en
[0,0]
y su próximo paso sería00
. El permanece en[0,0]
- Si el alfil está en una esquina o en una pared y se mudaría a una de las paredes, se mueve solo horizontal o verticalmente. es decir: el obispo está en
[0,5]
y su próximo paso sería01
. No puede ir a la izquierda, así que simplemente se mueve hacia arriba[0,4]
.
Cada posición tiene un valor de la frecuencia con que el obispo ha visitado este campo:
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 |
Los valores 15 (S) y 16 (E) son especiales porque marcan la posición inicial y final del alfil respectivamente y sobrescriben el valor real de la posición de respeto.
Gol
Cree un programa que tome una huella digital alfanumérica como entrada y produzca su representación artística ASCII como se muestra en los ejemplos.
Ejemplos
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 |
| |
| |
| |
+-----------------+
Reglas
- Este es el código de golf . El código en la menor cantidad de bytes gana.
- Puede no utilizar una biblioteca existente que produce la imagen.
- ¡Usa el idioma que prefieras!
- Su envío tiene que ser un programa completo
33:33:33:...:33
, cc:cc:cc:...:cc
serían ejemplos para esto. La huella digital generalmente es un hash MD5, por lo que es muy poco probable que obtenga ese resultado. No he encontrado ninguna fuente confiable sobre cómo lidiar con esto, por lo que por ahora diría: Suponga que no se visitará ninguna celda más de 14 veces.