2014-12-09 3 views
-3

Я пытаюсь сделать код шифрования и дешифрования. Этот код для шифрования ->Как я могу принести пространство в этом зашифрованном коде

   String text="I love StackOverflow"; 
       key="love"; 

       String s=text.toLowerCase();; 
       String s1=key.toLowerCase();; 
       char key1[]; 
       key1=new char[s1.length()]; 
       for(int i=0;i<s1.length();i++) 
       { 
       key1[i]=s1.charAt(i); 
       } 
       int k[]=new int[key1.length]; 
       char c[]=new char[s.length()]; 
       int cc[]=new int [s.length()]; 
       //int r[]=new int[s.length()]; 
       int ss[]=new int[s.length()]; 
       char result[]=new char[s.length()]; 
       for(int i=0;i<s.length();i++) 
       { 
       c[i]=s.charAt(i); 
       cc[i]=(int)c[i]-97; 
       } 
       for(int i=0;i<key1.length;i++) 
       { 
       k[i]=(int)key1[i]-97; 
       } 
       String g; 
       for(int i=0;i<s.length();i++) 
       { 
       ss[i]=(k[i%s1.length()]+cc[i])%26; 
       result[i]=(char)(ss[i]+97); 
       } 
       g=String.copyValueOf(result); 
       label.setText(g.toUpperCase()); 
      } 

Это дает мне этот результат -> THGSGSOWEOXOZJZVQZJA
И, когда я запустить дешифрование сообщение его отдавание me--> ITLOVETSTACKOVERFLOW (Но я хочу -> Я люблю StackOverflow) Проблема с не получаю пространство -> Мой дешифрования код ниже

   String text2="THGSGSOWEOXOZJZVQZJA"; 
      text2=text2.toLowerCase(); 
      String key="love"; 
      String s=text2; 
      String s1=key; 
      char h[]=new char[s.length()]; 
      int hh[]=new int[s.length()]; 
      for(int i=0;i<s.length();i++) 
      { 
       h[i]=s.charAt(i); 
       hh[i]=h[i]; 
       hh[i]=(int)hh[i]-97; 
      } 
      char k[]=new char[s1.length()]; 
      int kk[]=new int[s1.length()]; 
      for(int i=0;i<s1.length();i++) 
      { 
       k[i]=s1.charAt(i); 
       kk[i]=k[i]; 
       kk[i]=(int)kk[i]-97; 
      } 
      int re1[]=new int[s.length()]; 
      char ref[]=new char[s.length()]; 
      for(int i=0;i<s.length();i++) 
      { 
       re1[i]=hh[i]-kk[i%s1.length()]; 
      } 
       String value; 
      for(int i=0;i<s.length();i++) 
      { 
       if(re1[i]<0) 
       { 
        re1[i]=re1[i]+26; 
       } 
        ref[i]=(char) (re1[i]+97); 
      } 
       value=String.copyValueOf(ref); 
      // t2.setText(g); 
      label_1.setText(value.toUpperCase()); 

Любая идея, как я могу получить пространство или как я могу обнаружить это ли я задаю вопрос два глупо, поэтому я получил отрицательный в моем вопрос? Я думаю, что это достаточно сложно для ребят: P

+3

Как вы думаете, что делает% 26? –

+0

% 26 использует, потому что я следую за автоматическим ключевым шифром из формы табулятора, i только считая букву, которая распознается символом ascii, я имею в виду только 26 символов алфавита –

+0

Скорее всего, ваш вопрос получил downvoted, потому что: а) ваш код не отформатирован должным образом. б) неясно, чего вы даже хотите/каковы фактические ограничения. c) Вы не пытались написать правильный английский, поэтому его трудно читать. d) Его простая задача с простым решением, но представляемая, как если бы она была сложной. e) Я упоминал, что его трудно прочитать ваш код? –

ответ

1

Я уверен, что это первичное мышление и ваш алгоритм don't plan to roll your own crypto.

Проблема заключается в том, что вы отфильтровывать пространства :)

Если увеличить %26 и соответствующий +26 к 32 (в формате ASCII для пространства) он работает отлично.

+1

Ты выиграл меня в первом предложении. –

+0

Ya, криптограмма была дана лектором, мы должны выйти с кодировкой –

+0

Да, если я использую 32, то могу удалить это пространство, но ограничено только 26 английским письмом, я думаю, что я упоминал об этом раньше - Vigenere таблица auto key cipher, –

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