2016-07-16 2 views
0

Создал небольшой метод шифрования, чтобы преобразовать небольшую строку, основанную на расстоянии между символами, но не может для меня жизнь выяснить, как изменить ее, не зная расстояния между каждым символом от первоначального преобразования. Смотрите изображение, например, как это работает imgur.com/Ine4sBo.pngОбратный мой метод шифрования

Я уже сделал метод шифрует здесь (Javascript):

var all = ("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.#-?").split(''); 
    var position; 
    //var oKey = "P"; 



    function encrypt() // Encrypt Fixed 
    { 

     var sEncode = ("HI-MOM").split(''); 
     var oKey = "P"; 

     for (var i = 0; i < sEncode.length; i++) { 
      if (all.indexOf(oKey) < all.indexOf(sEncode[i])) {      
       position = all.indexOf(sEncode[i]) - all.indexOf(oKey); 
       output.value += "oKey: " + oKey + " distance to sEncode[" + i + "]: " + sEncode[i] + " Count: " + position + " Final Char: " + all[position-1] + "\n"; 
       oKey = sEncode[i]; 
      } 
      else {      
       position = all.length - all.indexOf(oKey) + all.indexOf(sEncode[i]); 
       output.value += "oKey: " + oKey + " distance to sEncode[" + i + "]: " + sEncode[i] + " Count: " + position + " Final Char: " + all[position-1] + "\n"; 
       oKey = sEncode[i]; 
      } 


     } 
    } 

Однако это метод расшифровки(), что меня убивает.

+0

Вы задаете вопрос, не относящийся к теме. Пожалуйста, прочитайте [On-Topic] (http://superuser.com/help/on-topic), [Как задать хороший вопрос?] (Http://superuser.com/help/how-to-ask) и [Какие типы вопросов я должен избегать?] (http://superuser.com/help/dont-ask). – DavidPostill

+0

Если вы не знаете, как работает метод шифрования, как кто-то может помочь вам отменить алгоритм? –

+0

Код не является даже функцией шифрования .... –

ответ

2

Из того, что я могу сказать, ваша encrypt функция может быть сведена к следующему:

var all = ("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.#-?").split(''); 
function encrypt(str) 
{ 
    var sEncode = str.split(''); 
    var result = ''; 
    var oKey = "P"; 
    for(var i = 0; i < sEncode.length; i++) 
    { 
     result += all[(all.indexOf(sEncode[i]) - all.indexOf(oKey) + all.length - 1) % all.length]; 
     oKey = sEncode[i]; 
    } 
    return result; 
} 

(я избавилась от если оговорки путем добавления all.length так или иначе, и удалить его снова с оператором остатка при необходимости .)

Оттуда, все, что вам нужно сделать, это перевернуть операнды (- all.indexOf(oKey) - 1 становится + all.indexOf(oKey) + 1 (и так как у нас нет больше вычитаний, добавив all.length больше не надо)) и в обратном порядке (так oKey получает назначен преобразованное значение вместо исходного):

var all = ("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.#-?").split(''); 
function decrypt(str) 
{ 
    var sEncode = str.split(''); 
    var result = ''; 
    var oKey = "P"; 
    for(var i = 0; i < sEncode.length; i++) 
    { 
     oKey = all[(all.indexOf(sEncode[i]) + all.indexOf(oKey) + 1) % all.length]; 
     result += oKey; 
    } 
    return result; 
} 
+0

Я пару дней назад переворачивал операнды. Думаю, это не сработало для меня, когда я сделал это. Сегодня я сидел в течение 45 минут, пытаясь понять эту чертову вещь на i.imgur.com/YbJAMXb.jpg на бумаге, и я все еще кое-что придумал. – herboren

Смежные вопросы