1

我想使用Base64加密editText字符串wnich將保存在sharedpreferences中,但是一旦字符串被編碼並保存,我的.xml文件就是空白。我是一個新手程序員,對於加密非常新穎,所以我失去了,不知道如何正確分析我的代碼,以確定可能非常簡單的問題。我收到了一些建議,但沒有清楚地表明問題出在哪裏,爲什麼不工作,以及如何解決問題。我懷疑我的加密方法,但不知道在哪裏。對於嘗試保護用戶名和密碼條目的編碼人員來說,這是一項常見任務。本教程中使用這種加密項目Click Herebase64 InvalidKeyException:密鑰長度不是128/192/256位

這裏是編碼類,加密和保存的EditText字符串:

public void onClick(View arg0) { 
    user=rName.getText().toString().trim(); 
    pass=rPwd.getText().toString().trim(); 

    if(arg0==regBttn){  
     if((user.length()!=0)) 
     { 
      if((pass.length()!=0)) 
     { 

     sp=getSharedPreferences("AccessApp",MODE_WORLD_WRITEABLE); 
     Editor myEditor=sp.edit(); 

     byte[] key = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6 }; 

     try { 
      String encryptedUser = encrypt(user, key); 
      myEditor.putString("USERNAME_KEY", encryptedUser); 
     } 
    catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
      String encryptedPass = encrypt(pass, key); 
      myEditor.putString("PASSWORD_KEY", encryptedPass); 

    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    myEditor.commit(); 
    Toast.makeText(this, "Registration is successfull",10000).show(); 
    i=new Intent(this,AccessApp.class); 
    startActivity(i); 
    } 
    else 
    { 
     Toast.makeText(this, "Please Enter password", 10000).show(); 
    }} 

    else{ 
     Toast.makeText(this,"Please Enter Username",10000).show(); 
    } 
     } 

else if(arg0==rtnBttn){ 
    AlertDialog.Builder builder=new AlertDialog.Builder(this); 
    builder.setTitle("Exit"); 
    builder.setMessage("Do you want to exit"); 
    builder.setCancelable(false); 
    builder.setPositiveButton("Yes",new DialogInterface.OnClickListener() { 

    public void onClick(DialogInterface dialog, int which) { 
    // TODO Auto-generated method stub 
    finish(); 
    } 
    }); 
    builder.setNegativeButton("No", new DialogInterface.OnClickListener() { 

      public void onClick(DialogInterface arg0, int arg1) { 
       arg0.cancel(); 
      } 
     }); 
    AlertDialog alert=builder.create(); 
    alert.show(); 
} 
    } 

public String encrypt(String toEncrypt, byte key[]) throws Exception { 
    SecretKeySpec secret = new SecretKeySpec(key, "AES"); 
    Cipher cipher = Cipher.getInstance("AES"); 
    cipher.init(Cipher.ENCRYPT_MODE, secret); 
    byte[] encryptedBytes = cipher.doFinal(toEncrypt.getBytes()); 
    String encrypted = Base64.encodeBytes(encryptedBytes); 
    return encrypted; 

} 

} 

的logcat:

11-11 23:41:59.873: W/System.err(11404): java.security.InvalidKeyException: Key length not 128/192/256 bits. 
11-11 23:41:59.873: W/System.err(11404): at com.android.org.bouncycastle.jce.provider.JCEBlockCipher.engineInit(JCEBlockCipher.java:570) 
11-11 23:41:59.894: W/System.err(11404): at com.android.org.bouncycastle.jce.provider.JCEBlockCipher.engineInit(JCEBlockCipher.java:617) 
11-11 23:41:59.903: W/System.err(11404): at javax.crypto.Cipher.init(Cipher.java:519) 
11-11 23:41:59.928: W/System.err(11404): at javax.crypto.Cipher.init(Cipher.java:479) 
11-11 23:41:59.943: W/System.err(11404): at com.SharedPreferences.Login.SharedPrefLoginActivity.encrypt(SharedPrefLoginActivity.java:139) 
11-11 23:41:59.953: W/System.err(11404): at com.SharedPreferences.Login.SharedPrefLoginActivity.onClick(SharedPrefLoginActivity.java:82) 
11-11 23:41:59.953: W/System.err(11404): at android.view.View.performClick(View.java:3511) 
11-11 23:41:59.953: W/System.err(11404): at android.view.View$PerformClick.run(View.java:14105) 
11-11 23:41:59.973: W/System.err(11404): at android.os.Handler.handleCallback(Handler.java:605) 
11-11 23:41:59.973: W/System.err(11404): at android.os.Handler.dispatchMessage(Handler.java:92) 
11-11 23:42:00.034: W/System.err(11404): at android.os.Looper.loop(Looper.java:137) 
11-11 23:42:00.034: W/System.err(11404): at android.app.ActivityThread.main(ActivityThread.java:4424) 
11-11 23:42:00.034: W/System.err(11404): at java.lang.reflect.Method.invokeNative(Native Method) 
11-11 23:42:00.103: W/System.err(11404): at java.lang.reflect.Method.invoke(Method.java:511) 
11-11 23:42:00.103: W/System.err(11404): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
11-11 23:42:00.124: W/System.err(11404): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
11-11 23:42:00.124: W/System.err(11404): at dalvik.system.NativeStart.main(Native Method) 
+0

猜測,你應該記錄你進入logcat的異常,而不是忽略它們......要麼登錄或重新拋出......這是要走的路...... –

回答

4

你好像算錯的字節:

byte[] key = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6 };

您需要一個128位密鑰(16個字節),但您在此聲明瞭17個字節。將密鑰長度減一,我認爲它應該起作用。

相關問題