У криптографії відкритого ключа відбиток відкритого ключа - це коротка послідовність байтів, яка використовується для ідентифікації більш тривалого відкритого ключа.
Зокрема, в SSH вони можуть бути використані для перевірки того, що сервер насправді є сервером, з яким я розраховую спілкуватися, і я не націлений на атаку з боку людини.
Зазвичай вони представлені як рядок шістнадцяткових цифр, тому порівняти його з відбитком пальців, який я очікував, може бути досить нудно і нудно:
37:e4:6a:2d:48:38:1a:0a:f3:72:6d:d9:17:6b:bd:5e
Щоб зробити це трохи простіше, OpenSSH запровадив метод візуалізації відбитків пальців як мистецтва ASCII, який виглядатиме так:
+-----------------+
| |
| |
| . |
| . o |
|o . o . S + |
|.+ + = . B . |
|o + + o B o E |
| o . + . o |
| .o |
+-----------------+
З цим я міг би спробувати запам'ятати грубу форму мистецтва ASCII і тоді (теоретично) розпізнав би її, коли змінився відбиток сервера і зображення виглядало інакше.
Як це працює
Сітка має ширину 17 символів і висоту 9 символів. "Єпископ" починається з рядка 4 / стовпця 8 (центр). Кожна позиція може бути позначена як [x, y], тобто [8,4] для вихідної позиції єпископа.
1111111
01234567890123456
+-----------------+
0| |
1| |
2| |
3| |
4| S |
5| |
6| |
7| |
8| |
+-----------------+
Єпископ використовує відбиток пальців для переміщення. Він читає його в байтовому порядку зліва направо і з найменш значущого біта в найзначніший біт:
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
Єпископ рухатиметься за наступним планом:
Bits Direction
-----------------
00 Up/Left
01 Up/Right
10 Down/Left
11 Down/Right
Особливі випадки:
- Якщо єпископ знаходиться в кутку і знову переїде в кут, він зовсім не рухається. тобто: Єпископ є,
[0,0]
і його наступним кроком буде00
. Він залишається в[0,0]
- Якщо єпископ знаходиться в кутку або біля стіни і переміститься в одну зі стін, він рухається лише горизонтально або вертикально. тобто: Єпископ є,
[0,5]
і його наступним кроком буде01
. Він не може піти ліворуч, тому просто рухається вгору, на[0,4]
.
Кожна позиція має значення того, як часто єпископ відвідував це поле:
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 |
Значення 15 (S) і 16 (E) є особливими тим, що вони позначають відповідно початкове і кінцеве положення єпископа і переписують реальне значення поважної позиції.
Мета
Створіть програму, яка приймає алфавітно-цифровий відбиток пальців у якості вхідного сигналу та виробляє його графічне зображення ASCII, як показано в прикладах.
Приклади
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 |
| |
| |
| |
+-----------------+
Правила
- Це код-гольф . Код у найменших байтах виграє.
- Ви можете НЕ використовувати існуючу бібліотеку , яка виробляє зображення.
- Використовуйте будь-яку мову ви хочете!
- Подання має бути повноцінною програмою
33:33:33:...:33
, cc:cc:cc:...:cc
будуть приклади для цього. Відбиток пальців, як правило, має хеш MD5, тому навряд чи ви отримаєте такий результат. Я не знайшов надійних джерел, як боротися з ними, тому зараз я б сказав: припустимо, жодна клітина не буде відвідуватися більше 14 разів.