Добавление base32 в адресную книгу
|
Часто люди дают ссылку на сайты не через домен, а по base32-хэшу. Это выглядит, например, так: gh6655arkncnbrzq5tmq4xpn36734d4tdza6flbw5xppye2dt6ga.b32.i2p
К сожалению, такой адрес является лишь хэшем полноценного длинного адреса, и поэтому не может быть добавлен в адресную книгу. Почему разработчики не сделали автоматический поиск полного адреса по хэшу — загадка, но нам придётся с этим мириться. Полный адрес rus.i2p выглядит так:
Добавлены переносы строки, ибо иначе это дичайшим образом влияет на вёрстку. В живом примере - никаких переносов нет, это всё одна строка. MXK4rYn24gJibBdIqfRNLJNPaUfminmIhrzU8g~1yEHy7qwrY1~a9186cAZqOg7cksD0j2VI01AZ21xPM4yV85b8r 3DVsLQ2qHOPH1qSA8yOVKoxCSUNz69NILpWoBwCXydbI8TUEALSvscAFkkWR2ZVDH2m1eiPm5j28yyBBE7ttPlLCp PF0D69PuEKiMKQqfDTSMA58nMtEfCsBM1-m5BXH0NA8DTHyDd4DfrjhBSkne0t2Xa9fZUCxrK4cTvUMGykW1aghjC m6YPnZN9Fo4NUP52VvXwGVuutzmWx8yBT2BFxAkO0CvfsZV8wDM51LXzHGYNHtE4E3wmoLuwOv5FyHOKipZ5VsG0r QlAf0hGXIAImkr2ognHmOVinHj7lYYg925XJTpnjv6xLGG9UEwBJ6tU0jdNlb016kc3renAFU34Ogg04Q-FTG3AbC dRLqwTPO9gud4MhWlq5oaHnh5Ck9Dn5TTxxtjkh4NdA4Osh7NoD~hXl33vkPMFJSqjaAAAA
Однако, есть возможность конвертации в обе стороны. Чтобы из длинного адреса получить короткий, воспользуйтесь python-скриптом (длинный адрес передаётся как параметр):
#!/usr/bin/env python import base64, hashlib, sys if len(sys.argv) != 2: print 'Usage: convertkey.py <base64key>' sys.exit(1) key = sys.argv[1] raw_key = base64.b64decode(key, '-~') hash = hashlib.sha256(raw_key) base32_hash = base64.b32encode(hash.digest()) print base32_hash.lower().replace('=', '')+'.b32.i2p'
А чтобы из короткого получить длинный, можно использовать встроенную в i2p функцию; делаем алиас:
alias i2p32to64='java -cp ~/i2p/lib/i2p.jar net.i2p.client.naming.LookupDest'
...и вызываем так: i2p32to64 gh6655arkncnbrzq5tmq4xpn36734d4tdza6flbw5xppye2dt6ga
Короткий адрес надо указывать без суффикса b32.i2p
а вот превращение короткого в длинный на Tcl, скриптик. ему можно кормить короткий адрес в виде http://gh6655arkncnbrzq5tmq4xpn36734d4tdza6flbw5xppye2dt6ga.b32.i2p/
#!/usr/bin/tclsh foreach url $argv { if {[regexp "^(?:https?://)?(\[a-z0-9\]\{52\})(?:\\.b32\\.i2p/?)\$" $url dummy hash]} { set url $hash } if {[regexp "^\[a-z0-9\]\{52\}\$" $url]} { puts "= $url =" set fd [open "|java -cp ~/i2p/lib/i2p.jar net.i2p.client.naming.LookupDest $url" "r"] while {! [eof $fd]} { gets $fd ln puts "$ln" } close $fd } }