#!/usr/bin/env python |
# usage: drunken_bishop.py [-h] [--mode {md5,sha256}] fingerprint |
# |
# Generate randomart from fingerprint |
# |
# positional arguments: |
# fingerprint |
# |
# optional arguments: |
# -h, --help show this help message and exit |
# --mode {md5,sha256}, -m {md5,sha256} |
importargparse |
importbase64 |
importnumpyasnp |
defget_steps(bits): |
bits_grouped=np.array(bits, dtype=np.int8).reshape((-1, 4, 2)) |
bits_grouped_reordered=np.flip(bits_grouped, axis=1) |
returnbits_grouped_reordered.reshape((-1, 2)) |
defdrunken_bishop(steps): |
positions=np.zeros((9, 17), dtype=np.int8) |
current_position=np.array([4, 8]) |
defmove(b0, b1): |
if (b0, b1) (0, 0): |
return (-1, -1) |
elif (b0, b1) (0, 1): |
return (-1, 1) |
elif (b0, b1) (1, 0): |
return (1, -1) |
elif (b0, b1) (1, 1): |
return (1, 1) |
raiseException('Impossible move: ({}, {})'.format(b0, b1)) |
forstepinsteps: |
positions[tuple(current_position)] +=1 |
current_position+=move(step[0], step[1]) |
ifcurrent_position[0] >=positions.shape[0]: |
current_position[0] =positions.shape[0] -1 |
elifcurrent_position[0] <=0: |
current_position[0] =0 |
ifcurrent_position[1] >=positions.shape[1]: |
current_position[1] =positions.shape[1] -1 |
elifcurrent_position[1] <=0: |
current_position[1] =0 |
positions[(4, 8)] =15 |
positions[tuple(current_position)] =16 |
returnpositions |
defprint_randomart(atrium): |
values= { |
0: ' ', 1: '.', 2: 'o', 3: '+', 4: '=', 5: '*', 6: 'B', 7: 'O', 8: 'X', |
9: '@', 10: '%', 11: '&', 12: '#', 13: '/', 14: '^', 15: 'S', 16: 'E' |
} |
print('+---[ n/a ]----+') |
forrinatrium: |
print('|', end=') |
forcinr: |
print(values[c], end=') |
print('|') |
print('+-----------------+') |
defget_md5_bits(fingerprint): |
returnnp.array([list('{:08b}'.format(int(i, 16))) foriinfingerprint.split(':')]) |
defget_sha256_bits(fingerprint): |
missing_padding=4- (len(fingerprint) %4) |
fingerprint+='='*missing_padding |
returnnp.array([list('{:08b}'.format(i)) foriinbase64.b64decode(fingerprint)]) |
defmain(): |
parser=argparse.ArgumentParser( |
description='Generate randomart from fingerprint') |
parser.add_argument('--mode', '-m', choices=['md5', 'sha256'], default='sha256') |
parser.add_argument('fingerprint', type=str) |
args=parser.parse_args() |
bits=None; |
ifargs.mode'md5': |
bits=get_md5_bits(args.fingerprint) |
elifargs.mode'sha256': |
bits=get_sha256_bits(args.fingerprint) |
else: |
raiseException('Unsupported hashing mode: {}'.format(args.mode)) |
steps=get_steps(bits) |
atrium=drunken_bishop(steps) |
print_randomart(atrium) |
if__name__'__main__': |
main() |
# /bin/rm -v /etc/ssh/ssh_host_*
# dpkg-reconfigure openssh-server
$ sudo systemctl restart ssh
$ /etc/init.d/ssh restart
$ ssh-keygen -R remote-server-name-here
$ ssh [email protected]
$ man dpkg-reconfigure
$ man sshd
Triple des key generator java.