Зашифровать / расшифровать строку в Android и Java разные значения - PullRequest
2 голосов
/ 16 марта 2012

Я использую этот код для шифрования и дешифрования в Java и Android некоторых строк, и в каждой системе я получаю разные значения.

Код, который я использую, взят из http://www.androidsnippets.com/encryptdecrypt-strings (Я не буду вставлять его, потому что он довольно большой).

Например, в Android для шифрования "aa" я получаю это: 1C6BD31C57F42ACFD0EDD2DD5B7A92CA

и точно такую ​​же строку с тем же ключом, что и вЯ получаю: 61FAD1203B7AC92AD9345771AA273DA5

Есть идеи?

Заранее спасибо!

Ответы [ 3 ]

5 голосов
/ 16 марта 2012

Это только мое предположение, но я думаю, что причина в вашем ключевом происхождении.Я не являюсь разработчиком на Java, поэтому, возможно, я неправильно понимаю код.

Этот код всегда вызывает getRawKey () при шифровании и дешифровании.getRawKey () выглядит так, как будто он берет то, что они называют семенем, или ваш общий секрет, и использует его для вычисления нового случайного ключа для выполнения фактического шифрования / дешифрования.

SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
    sr.setSeed(seed);
    kgen.init(128, sr); // 192 and 256 bits may not be available
    SecretKey skey = kgen.generateKey();

В соответствии с найденными документами Java здесь , setSeed () "Пересматривает этот случайный объект. Данное семя дополняет, а не заменяет существующее семя."

Я предполагаю, что начальное состояние ГСЧ различно для каждой системы / платформы, и, следовательно, оно дает вам разные результаты.Вам следует исправить вывод ключа на что-то более стандартное и непротиворечивое или использовать уже установленную криптографическую систему, такую ​​как PGP, в библиотеках Bouncy Castle.

1 голос
/ 01 декабря 2012

Этот пример продемонстрирует, как зашифровать строчку и расшифровать, для этого нам понадобится клавиша Shift, которая сместит один символ на другой символ, например, если у вас есть «b» и используется клавиша shift = 2, тогда будет 98 + 2 = 100, что = 'd', и снова 100-2 = 98, что 'b', так что это будет работать следующим образом.

Сделайте вашу строку зашифрованной здесь!

final int shift_key = 4; //it is the shift key to move charcter, like if i have 'a' then a=97+4=101 which =e and thus it changes
    String plainText = "piran jhandukhel"; 
    char character; 
     char ch[]=new char[plainText.length()];//for storing encrypt char
   for (int iteration = 0; iteration < plainText.length(); iteration++)
            {
                    character = plainText.charAt(iteration); //get characters
                    character = (char) (character + shift_key); //perform shift
              }     ch[iteration]=character;//assign char to char array
     String encryptstr = String.valueOf(ch);//converting char array to string
     Toast.makeText(this, "Encrypt string is "+ encryptstr Toast.LENGTH_LONG).show();

Сделайте расшифровку строки здесь!

   for(int i=0;i<encryptstr.length();i++)
     {
        character=str.charAt(i);
        character = (char) (character -shift_key); //perform shift
            ch[i]=character;
     }
 Stirng decryptstr = String.valueOf(ch);
     Toast.makeText(this, "Decrypted String is "+decryptstr, Toast.LENGTH_LONG).show();
0 голосов
/ 16 марта 2012

Похоже, что каждый раз, когда вы его зашифруете, он будет иметь разный вывод. Это нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...