шифр эль гамаля

Тема в разделе "WASM.CRYPTO", создана пользователем himik, 15 окт 2011.

  1. himik

    himik New Member

    Публикаций:
    0
    Регистрация:
    6 янв 2010
    Сообщения:
    4
    При шифровании текста эльгамалем (классический вариант: мультипликативная группа Zp со звездочкой, (text*a^rand) mod p,...) в результате получаются пары чисел, оба из которых меньше p. Подскажите, как лучше перегнать это в текст, при этом не уменьшать р и получить количество символов криптотекста ровно в 2 раза большее, чем в открытом тексте?
     
  2. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    из-за того, что Вы берете модуль то длина криптотекста будет зависть от открытого текста. На счет перегнать в текст, это в каком смысле? Вы можете BASE64 использовать.
     
  3. himik

    himik New Member

    Публикаций:
    0
    Регистрация:
    6 янв 2010
    Сообщения:
    4
    Понимаю некоторую нелогичность, с точки зрения практического применения, но мой преподаватель - бабушка лет под 60 и она категорически отказывается воспринимать идею, насчет того, что можно просто брать данные по 2 байта и использовать полученное шестнацатиричное значение. Ей подавай строку, алфваит, перевод строки в последовательность номеров символов алфавита и т.д. Вобщем если я беру модуль 29(латиница+" ",",",".") то это не катит: модуль маленький. Если модуль побольше - то весь диапозон полученных значений я никак не умещу в [0,..,29], так чтобы символов криптотекста было ровно в двое больше чем сиволов открытого.
    Из такого маразма как-то можно выкрутится?
     
  4. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    c = (x % 30) + ' '; x[i+1] = x / 30;
    както так. но лучше делитель выбрать в виде 2**k.
     
  5. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Так берите большое число, как модуль. И большой блок нужной длины 1024бита например и все. я не понимаю Вашего вопроса видимо.
     
  6. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    himik
    Бабушка между прочим права : берешь латиницу большие и маленькие + цифры + пару символов и получаешь то, что тебе советовали - Base64.
    Если взять три байта зашифрованного потока и разбить их на группу 4х6 битов, то в результате ЛЮБОЙ текст, а не только 26+3, закодируешь не 1 к 2, а всего 1 к 1.33
    И бабушка поставит 5 баллов.
     
  7. gorodon

    gorodon New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2009
    Сообщения:
    301
    himik
    Если я правильно понял - вам надо сначала входной текст ужать (если анси - то можно ужать с 8 бит до 6 ; если юникод - то с 16 бит ужимаем до тех же 6 с допущением, что юзаем только русские буквы - большие и маленькие - вроде как раз 64 будет...), потом провести вычисления и полученные числа представить в том же алфавите (32+32 = 64)...
     
  8. intimodessa

    intimodessa Одесситка

    Публикаций:
    0
    Регистрация:
    26 окт 2011
    Сообщения:
    1
    Адрес:
    Одесса
    так есть же раскодировщик. посмотри на википедии
     
  9. kyprizel

    kyprizel New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    232
    Адрес:
    TSK
    может так?

    Код (Text):
    1. #!/usr/bin/env python
    2.  
    3. def s2n(s):
    4.     return long(s, 16)
    5.  
    6. def n2s(num):
    7.     if num < 0:
    8.         num *= -1
    9.     s = ''
    10.     while 1:
    11.         s = chr(num % 256) + s
    12.         num = num // 256
    13.         if num == 0:
    14.             break
    15.     return s