加密/解密Android和Java中的字符串不同的值

时间:2012-03-15 21:34:02

标签: java android security encryption

我正在使用此代码在Java和Android中加密和解密一些字符串,并且在每个系统中我获得了不同的值。

我使用的代码来自http://www.androidsnippets.com/encryptdecrypt-strings(我不会粘贴它,因为它非常大)。

例如在Android中用于加密“aa”我得到了这个: 1C6BD31C57F42ACFD0EDD2DD5B7A92CA

与Java中具有相同键的完全相同的String我得到: 61FAD1203B7AC92AD9345771AA273DA5

有什么想法吗?

提前致谢!

3 个答案:

答案 0 :(得分:5)

这只是我的猜测,但我认为原因是你的关键推导。我不是一个真正的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();

根据发现here的Java文档,setSeed()“重新种植这个随机对象。给定的种子补充,而不是替换,现有的种子。”

我的猜测是RNG的初始状态在每个系统/平台上都是不同的,因此它会给你不同的结果。您应该将密钥派生修复为更标准和一致的内容,或者使用已经建立的加密系统,如Bouncy Castle库中的PGP。

答案 1 :(得分:1)

这个例子将演示如何加密sting和解密,为此目的,我们需要一个shif键,它将一个字符移动到另一个字符,如果你有'b'并使用shift键= 2那么它就是exaple将becom 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();

答案 2 :(得分:0)

每次加密时看起来都会有不同的输出。这很正常。