Comments 61
Удобная идея. Я бы попользовал.
Для удобства еще бы добавил в контектное меню textarea пункт «вставить локальную картинку». Запускать проводник и насиловать drag&drop не всегда удобно.
Для удобства еще бы добавил в контектное меню textarea пункт «вставить локальную картинку». Запускать проводник и насиловать drag&drop не всегда удобно.
0
Если все так, как на видео, то все отлично. Свою функцию оно отлично делает. В «планах» все замечания есть. В ЖЖ конечно удобней всего писать через Semagic, и ему точно не хватает такого плагина.
+1
Раньше пользовался Semagic, но постить фотографии замучился :-)
Перешел на Plain text режим + плагин Livejournal addons (https://addons.mozilla.org/ru/firefox/addon/4536)
По функциям не хуже семаджика.
PS: Семаджик умеет загружать фотки, но немного по другому. (Журнал -> Изображения)
Перешел на Plain text режим + плагин Livejournal addons (https://addons.mozilla.org/ru/firefox/addon/4536)
По функциям не хуже семаджика.
PS: Семаджик умеет загружать фотки, но немного по другому. (Журнал -> Изображения)
0
Загружает он их великолепно и очень удобно, таким же drag&drop, только нужно нам(а в данном случае Я.Фоток), там нет.
0
encrypt — это да. Вчера тоже повозился с ним. Теперь вот думаю, как перенести сайтик на GAE. Вариант с удаленным шифрованием мне не нравится.
Если портируете утилиту на какой-нибудь скриптовый язык — пните, пожалуйста. :)
Если портируете утилиту на какой-нибудь скриптовый язык — пните, пожалуйста. :)
0
на php не удалось портировать. очень сложно сопоставлять типы данных.
0
Красивее делать не буду. И так весь вечер убил, чтобы понять че там к чему в этих сях.
#-*- coding:utf-8 -*-
import sys, copy
if __name__ == '__main__':
if len(sys.argv) != 3 : print "usage: python %s <public-key> <text>" % sys.argv[0]; sys.exit()
NSTR,ESTR = sys.argv[1].split("#")
DATA_ARR = [ord(x) for x in sys.argv[2]]
N,E,STEP_SIZE = int(NSTR,16),int(ESTR,16), len(NSTR)/2-1
prev_crypted = [0]*STEP_SIZE
hex_out = ""
for i in range(0,(len(DATA_ARR)-1)/STEP_SIZE+1):
tmp = DATA_ARR[i*STEP_SIZE:(i+1)*STEP_SIZE]
tmp = [tmp[i] ^ prev_crypted[i] for i in range(0,len(tmp))]
tmp.reverse()
plain = 0
for x in range(0,len(tmp)): plain+= tmp[x]*pow(256, x, N)
hex_result = "%x" % pow(plain,E,N)
if len(hex_result) % 2 == 1: hex_result = "0" + hex_result
for x in range(0,min(len(hex_result),len(prev_crypted)*2),2):
prev_crypted[x/2] = int(hex_result[x:x+2],16)
hex_out += ("0" if len(tmp) < 16 else "") + ("%x" % (len(tmp)*256)) + "4000" + hex_result
print hex_out.decode("hex").encode("base64").replace("\n","")
+1
> чтобы понять че там к чему в этих сях
всмысле что там яндекс понаписал, а не вообще язык :)
Кстати мой код будет работать (наверное) только с текущей длиной ключа. Если изменится, то нужно будет мелочь пофиксить.
всмысле что там яндекс понаписал, а не вообще язык :)
Кстати мой код будет работать (наверное) только с текущей длиной ключа. Если изменится, то нужно будет мелочь пофиксить.
0
Спасибо большое! Сегодня завтра попробую на практике. :)
0
Спасибо, авось получится под JS переписать =)
0
Получится. Взять внешние библиотеки BigInt, Base64 и переписать
0
Хм. Вы про обычный javascript? Браузерный? :)
0
Именно на него хочу.
Сейчас завис на создании Ord функции по JS :-)
Сейчас завис на создании Ord функции по JS :-)
0
А чем Вам не нравится браузерный JS? Язык как язык.
+1
Ура, все работает! :-)
Спасибо!
Спасибо!
0
Что эта строчка делает? ЧТО-то не очень понимаю =)?
tmp = [tmp[i] ^ prev_crypted[i] for i in range(0,len(tmp))]
0
Вау =))) А я понять не мог, как возведение в степень ноль дает тоже самое число :-)))
0
тяжко Пайтон скрипт переделывать на JS :-) Производительность при замене pow(256, x, N) на (pow(256, x)%N) падает раз в 10-20 :-)
0
НЕ НАДО делать такую замену — это ниразу не равнозначные алгоритмы! 10-20 раз это вам повезло.
www.leemon.com/crypto/BigInt.js
В этой и других библиотеках для реализации bigint есть специальная встроенная функция.
www.leemon.com/crypto/BigInt.js
В этой и других библиотеках для реализации bigint есть специальная встроенная функция.
+1
Вкрадце разница:
pow(256,x,N) все промежуточные вычисления приводит к остатку по модулю N. Соответственно всегда манипулирует числами меньше N
pow(256, x) тупо вычисляет степень. При этом ему придется манипулировать целыми числами длинной в несколько тысяч/миллионов знаков.
pow(256,x,N) все промежуточные вычисления приводит к остатку по модулю N. Соответственно всегда манипулирует числами меньше N
pow(256, x) тупо вычисляет степень. При этом ему придется манипулировать целыми числами длинной в несколько тысяч/миллионов знаков.
0
Почти дописал… Дошел до этапа
Строка hex_out из JS и Py скрипта совпадает.
Но, скрипт для декодирования из HEX и последующим кодированием в BAse64 не могу нормальный найти.
Тут взял функцию для декодирования hex: farhadi.ir/works/hex
Тут для Base64: farhadi.ir/works/base64
Результат JS и Py различный получается :/
print hex_out.decode("hex").encode("base64").replace("\n","")
Строка hex_out из JS и Py скрипта совпадает.
Но, скрипт для декодирования из HEX и последующим кодированием в BAse64 не могу нормальный найти.
Тут взял функцию для декодирования hex: farhadi.ir/works/hex
Тут для Base64: farhadi.ir/works/base64
Результат JS и Py различный получается :/
0
etherhack.co.uk/ascii/baseconvert/baseconvert.html
попробуй отсюда. потестил на паре хексов — вроде совпадает
попробуй отсюда. потестил на паре хексов — вроде совпадает
0
Сорри.
Нижний регистр решил проблему :)
base64Encode(hexDecode(hex_out.toLowerCase()))
Портировал Ваш скрипт на JS :-)
Завтра почищу его и выложу.
Нижний регистр решил проблему :)
base64Encode(hexDecode(hex_out.toLowerCase()))
Портировал Ваш скрипт на JS :-)
Завтра почищу его и выложу.
0
Теперь портирование на PHP не кажется таким страшным? )
0
Признаюсь, не вижу практического смысла от портировании на PHP.
Во вторых, Вы сами сказали:
>Кстати мой код будет работать (наверное) только с текущей длиной ключа. Если изменится, то нужно будет мелочь пофиксить.
Поэтому, создавать то, что нужно будет поддерживать в плане доработки, но использоваться мной не будет — не очень хочется.
PHP это скорее серверный язык. И даже более логично портировать на просто Java, чем на PHP. Из PHP я в данный момент запускаю exec('encrypt key str') и доволен.
JS вариант я с радостью буду поддерживать. Думаю надо на code.google разместить его будет.
Во вторых, Вы сами сказали:
>Кстати мой код будет работать (наверное) только с текущей длиной ключа. Если изменится, то нужно будет мелочь пофиксить.
Поэтому, создавать то, что нужно будет поддерживать в плане доработки, но использоваться мной не будет — не очень хочется.
PHP это скорее серверный язык. И даже более логично портировать на просто Java, чем на PHP. Из PHP я в данный момент запускаю exec('encrypt key str') и доволен.
JS вариант я с радостью буду поддерживать. Думаю надо на code.google разместить его будет.
0
Да я просто вспомнил ваше сообщение
> на php не удалось портировать. очень сложно сопоставлять типы данных.
и решил подколоть.
По поводу длинны ключа — единственное, что может понадобиться изменить — строчку:
hex_out += («0» if len(tmp) < 16 else "") + ("%x" % (len(tmp)*256)) + «4000» + hex_result
Было лень вводить лишние константы.
> на php не удалось портировать. очень сложно сопоставлять типы данных.
и решил подколоть.
По поводу длинны ключа — единственное, что может понадобиться изменить — строчку:
hex_out += («0» if len(tmp) < 16 else "") + ("%x" % (len(tmp)*256)) + «4000» + hex_result
Было лень вводить лишние константы.
0
256 это длина ключа, которая в данный момент используется. Я прав?
0
Вообще длина ключа 512. Но тут выяснилась проблема — запустил тест, запрашивающий ключи с яндекса и сравнивающий вывод моего скрипта и яндексовского encrypt.
На 1000 ключей нашлось 4 несовпадения. Где-то не учел что-то. Буду править.
На 1000 ключей нашлось 4 несовпадения. Где-то не учел что-то. Буду править.
0
Надо бы мой JS аналог прогнать и сравнить результаты потом :-)
У Вас случайно не сохранились эти ключи?
У Вас случайно не сохранились эти ключи?
0
Ключ
Строка
В питон варианте для лечения бага заменил строку
на
Потестил ключи длиннее — работает вроде (только «4000» заменил на соответствующее вычисление этой костанты). Косяки с ключами короче текущего, что ожидаемо — я не копировал алгоритм яндекса, а пытался его воспроизвести с использованием стандартных для всех языков типов «строка» и «число» — мог где-то и не учесть варианты для других длин ключа.
81DA1AD21759F9B8160F737E717482C56AB7BBCA2A9280B223FD8283C5CCD286E7CAF4F765954B0B4BD0746DB040CD226E444E50567AF6563F964006A9A81D9F#10001
Строка
6dc8373faa9a424988341d3f2
В питон варианте для лечения бага заменил строку
if len(hex_result) % 2 == 1: hex_result = "0" + hex_result
на
hex_result = "".join(['0']*( len(NSTR)- len(hex_result))) + hex_result
Потестил ключи длиннее — работает вроде (только «4000» заменил на соответствующее вычисление этой костанты). Косяки с ключами короче текущего, что ожидаемо — я не копировал алгоритм яндекса, а пытался его воспроизвести с использованием стандартных для всех языков типов «строка» и «число» — мог где-то и не учесть варианты для других длин ключа.
+1
упс. строка была «6dc8373faa9a424988341d3f25ffeaec». Обрезалась при копировании из putty
+1
Благодарю. :-) Внес соответствующие правки.
А где-то исходник вашего актуального скрипта можно посмотреть? Думаю себе тоже 4000 заменить на вычисляемое число :-)
А где-то исходник вашего актуального скрипта можно посмотреть? Думаю себе тоже 4000 заменить на вычисляемое число :-)
0
#-*- coding:utf-8 -*-
import sys, copy
if __name__ == '__main__':
if len(sys.argv) != 3 : print "usage: python %s <public-key> <text>" % sys.argv[0]; sys.exit()
NSTR,ESTR = sys.argv[1].split("#")
DATA_ARR = [ord(x) for x in sys.argv[2]]
N,E,STEP_SIZE = int(NSTR,16),int(ESTR,16), len(NSTR)/2-1
prev_crypted = [0]*STEP_SIZE
hex_out = ""
for i in range(0,(len(DATA_ARR)-1)/STEP_SIZE+1):
tmp = DATA_ARR[i*STEP_SIZE:(i+1)*STEP_SIZE]
tmp = [tmp[i] ^ prev_crypted[i] for i in range(0,len(tmp))]
tmp.reverse()
plain = 0
for x in range(0,len(tmp)): plain+= tmp[x]*pow(256, x, N)
hex_result = "%x" % pow(plain,E,N)
hex_result = "".join(['0']*( len(NSTR)- len(hex_result))) + hex_result
for x in range(0,min(len(hex_result),len(prev_crypted)*2),2):
prev_crypted[x/2] = int(hex_result[x:x+2],16)
hex_out += ("0" if len(tmp) < 16 else "") + ("%x" % len(tmp)) + "00" # current size
ks = len(NSTR)/2
hex_out += ("0" if ks < 16 else "") + ("%x" % ks) + "00" # key size
hex_out += hex_result
print hex_out.decode("hex").encode("base64").replace("\n","")
+1
Понял почему, не работает для более мелких ключей. У яндекса библиотека с альтернативной математикой.
Для мелких чисел периодически библиотека яндекса вычисляет неверно:
Например:
p = 3486775
e = 65537
n = 2279134640
По мнению яндекса (p^e) mod n будет равно 1853620120
По мнению всего остального человечества это равно 361606135.
На больших числах вроде ошибок не было.
Так что я могу воспроизвести алгоритм шифрации (и воспроизвел), но воспроизводить ошибки я не хочу.
Для мелких чисел периодически библиотека яндекса вычисляет неверно:
Например:
p = 3486775
e = 65537
n = 2279134640
По мнению яндекса (p^e) mod n будет равно 1853620120
По мнению всего остального человечества это равно 361606135.
На больших числах вроде ошибок не было.
Так что я могу воспроизвести алгоритм шифрации (и воспроизвел), но воспроизводить ошибки я не хочу.
0
Это написали за меня. Жду готового xpi.
Пожелания:
1. Выложить код на GitHub для социального кодинга.
2. При вставке картинки html прописывать пустой alt и высоту с шириной.
Пожелания:
1. Выложить код на GitHub для социального кодинга.
2. При вставке картинки html прописывать пустой alt и высоту с шириной.
0
С ГитХаб что-то у меня непонимание. Зарегистрировался, но там только команды для юниксов. про виндовс клиент ни слова )
0
0
так где взять плагин что бы потестить?
0
Новое сообщение про плагин:
0
Ссылка на скачивание тут:
habrahabr.ru/blogs/firefox/83710/
habrahabr.ru/blogs/firefox/83710/
0
Sign up to leave a comment.
MyYandeksFotki uploader (MYF) — загрузка фоток через Firefox в Я.Фотки и вставка в Textarea