簡體   English   中英

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

[英]Encrypt/Decrypt String in Android and Java different values

我正在使用此代碼在Java和Android中加密和解密某些字符串,在每個系統中,我得到一個不同的值。

我使用的代碼來自http://www.androidsnippets.com/encryptdecrypt-strings (我不會粘貼它,因為它很大)。

例如,在Android中用於加密“ aa”的代碼如下:1C6BD31C57F42ACFD0EDD2DD5B7A92CA

和與Java中的種子具有相同鍵的完全相同的String,我得到:61FAD1203B7AC92AD9345771AA273DA5

任何想法?

提前致謝!

這只是我的猜測,但我認為原因是您的關鍵推導。 我不是真正的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()“對這個隨機對象進行加密。 給定的種子補充而不是替換現有的種子。”

我的猜測是,RNG的初始狀態在每個系統/平台上都不同,因此可以為您提供不同的結果。 您應該將密鑰派生修正為更加標准和一致的內容,或者使用已經建立的加密系統,例如Bouncy Castle庫中的PGP。

這個例子將演示如何加密字符串和解密,為此,我們需要一個shif密鑰,它將一個字符轉移到另一個字符,例如,如果您有'b'並使用shift key = 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();

每次加密時,它看起來都會有不同的輸出。 這很正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM