Добавление base32 в адресную книгу

Материал из I2P-ilita вики
Перейти к навигацииПерейти к поиску
Zrada.png ЗРАДА!

Информация была грубо перекатана со свидомой википедии.
Требуется дополнить её фактами, разбавить картинками, переписать или хотя бы почистить от мусора.

Часто люди дают ссылку на сайты не через домен, а по 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
  }
}