Например увидел такую сеть в Краснодаре на новогодние праздники. Аналог «Союз»-а, но союз старый и не умер еще чисто случайно, а эта новая. Есть практически в каждом крупном торговом центре. Название не вспомню быстро.
Кстати в глубинках с медленными интернетами носители еще сильно распространены. Там даже появляются и развиваются целые сети больших магазинов с компактами.
Последние компы, которые покупал были без СД-привода: ноутбук себе и mini-itx комп родителям (покупал умышленно без него — чтоб компактней и легче устройства были)
Вместо СД привода зашел в ближайший ларек и купил флешку.
Лучше ты пиши про свой — он сложнее (ввиду отсутствия базовой поддержки больших чисел в js, base64 и тд). Мне лень. Мой можешь вставлять и использовать как хочешь.
По совокупности требований быстродействие/размер/вес/цена/бренд/.../без глянца таких может просто не оказаться. При этом если остальные характеристики требуют каких-то технических сложностей или увеличивают цену, то наличие матовой поверхности не меняет ничего. И не совсем понятна логика производителей, тыкающих везде глянец.
У меня ноутбук с глянцем. К глянцевому экрану я привык еще на предыдущем ноуте — уже как-то не раздражает.
На корпусе всего одна глянцевая деталь и вот она дико бесит — рамка вокруг экрана. Не могли-таки уроды совсем без глянца на корпусе обойтись — не модно епт. Все никак руки не дойдут мелкой шкуркой по ней пройтись :)
lenovo u350 если что.
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)
В питон варианте для лечения бага заменил строку if len(hex_result) % 2 == 1: hex_result = "0" + hex_result
на hex_result = "".join(['0']*( len(NSTR)- len(hex_result))) + hex_result
Потестил ключи длиннее — работает вроде (только «4000» заменил на соответствующее вычисление этой костанты). Косяки с ключами короче текущего, что ожидаемо — я не копировал алгоритм яндекса, а пытался его воспроизвести с использованием стандартных для всех языков типов «строка» и «число» — мог где-то и не учесть варианты для других длин ключа.
Вообще длина ключа 512. Но тут выяснилась проблема — запустил тест, запрашивающий ключи с яндекса и сравнивающий вывод моего скрипта и яндексовского encrypt.
На 1000 ключей нашлось 4 несовпадения. Где-то не учел что-то. Буду править.
> на php не удалось портировать. очень сложно сопоставлять типы данных.
и решил подколоть.
По поводу длинны ключа — единственное, что может понадобиться изменить — строчку:
hex_out += («0» if len(tmp) < 16 else "") + ("%x" % (len(tmp)*256)) + «4000» + hex_result
Было лень вводить лишние константы.
Вместо СД привода зашел в ближайший ларек и купил флешку.
На корпусе всего одна глянцевая деталь и вот она дико бесит — рамка вокруг экрана. Не могли-таки уроды совсем без глянца на корпусе обойтись — не модно епт. Все никак руки не дойдут мелкой шкуркой по ней пройтись :)
lenovo u350 если что.
Для мелких чисел периодически библиотека яндекса вычисляет неверно:
Например:
p = 3486775
e = 65537
n = 2279134640
По мнению яндекса (p^e) mod n будет равно 1853620120
По мнению всего остального человечества это равно 361606135.
На больших числах вроде ошибок не было.
Так что я могу воспроизвести алгоритм шифрации (и воспроизвел), но воспроизводить ошибки я не хочу.
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» заменил на соответствующее вычисление этой костанты). Косяки с ключами короче текущего, что ожидаемо — я не копировал алгоритм яндекса, а пытался его воспроизвести с использованием стандартных для всех языков типов «строка» и «число» — мог где-то и не учесть варианты для других длин ключа.
На 1000 ключей нашлось 4 несовпадения. Где-то не учел что-то. Буду править.
> на php не удалось портировать. очень сложно сопоставлять типы данных.
и решил подколоть.
По поводу длинны ключа — единственное, что может понадобиться изменить — строчку:
hex_out += («0» if len(tmp) < 16 else "") + ("%x" % (len(tmp)*256)) + «4000» + hex_result
Было лень вводить лишние константы.