[英]AES Encryption Decryption Algorithm in Android
我正在尝试使用Android中的AES算法加密和解密我的数据。 这是我的代码
package com.example.aesandroidsecurity;
import java.security.NoSuchAlgorithmException;
//import java.security.spec.AlgorithmParameterSpec;
import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private Cipher cipher;
private SecretKeySpec keyspec;
private IvParameterSpec ivspec;
private String iv = "fedcba9876543210";
private String SecretKey = "1234567890123456";
Button encrypt = (Button)findViewById(R.id.button1);
Button decrypt = (Button)findViewById(R.id.button2);
EditText data = (EditText)findViewById(R.id.button2);
String plainText = data.getText().toString();
byte[] encrypted = null;
byte[] decrypted = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//byte[] keyBytes = new byte[32];
ivspec = new IvParameterSpec(iv.getBytes());
keyspec = new SecretKeySpec(SecretKey.getBytes(), "AES");
try {
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
}
catch (NoSuchAlgorithmException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try{
cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
encrypted = cipher.doFinal(plainText.getBytes());
}
catch(Exception e)
{
e.printStackTrace();
}
encrypt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), ""+encrypted,
Toast.LENGTH_LONG).show();
}
});
decrypt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
try{
cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);
decrypted = cipher.doFinal(encrypted);
}
catch(Exception e)
{
e.printStackTrace();
}
Toast.makeText(getApplicationContext(), ""+decrypted,
Toast.LENGTH_LONG).show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is
present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
**当我尝试运行我的应用程序时,我的应用程序停止运行,并且在logcat中出现以下错误。 请帮我... **
02-27 13:59:42.806: E/Trace(1903): error opening trace file: No such
file or directory (2)
02-27 13:59:43.296: D/AndroidRuntime(1903): Shutting down VM
02-27 13:59:43.345: W/dalvikvm(1903): threadid=1: thread exiting
with uncaught exception (group=0x40a71930)
02-27 13:59:43.386: E/AndroidRuntime(1903): FATAL EXCEPTION: main
02-27 13:59:43.386: E/AndroidRuntime(1903):
java.lang.RuntimeException: Unable to instantiate activity
ComponentInfo{com.example.aesandroidsecurity/com.example.aesandroidsecurity.MainActivity}:
java.lang.NullPointerException
02-27 13:59:43.386: E/AndroidRuntime(1903): at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106)
02-27 13:59:43.386: E/AndroidRuntime(1903): at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
02-27 13:59:43.386: E/AndroidRuntime(1903): at
android.app.ActivityThread.access$600(ActivityThread.java:141)
02-27 13:59:43.386: E/AndroidRuntime(1903): at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
02-27 13:59:43.386: E/AndroidRuntime(1903): at
android.os.Handler.dispatchMessage(Handler.java:99)
02-27 13:59:43.386: E/AndroidRuntime(1903): at
android.os.Looper.loop(Looper.java:137)
02-27 13:59:43.386: E/AndroidRuntime(1903): at
android.app.ActivityThread.main(ActivityThread.java:5041)
02-27 13:59:43.386: E/AndroidRuntime(1903): at
java.lang.reflect.Method.invokeNative(Native Method)
02-27 13:59:43.386: E/AndroidRuntime(1903): at
java.lang.reflect.Method.invoke(Method.java:511)
02-27 13:59:43.386: E/AndroidRuntime(1903): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-27 13:59:43.386: E/AndroidRuntime(1903): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-27 13:59:43.386: E/AndroidRuntime(1903): at
dalvik.system.NativeStart.main(Native Method)
02-27 13:59:43.386: E/AndroidRuntime(1903): Caused by:
java.lang.NullPointerException
02-27 13:59:43.386: E/AndroidRuntime(1903): at
android.app.Activity.findViewById(Activity.java:1839)
02-27 13:59:43.386: E/AndroidRuntime(1903): at
com.example.aesandroidsecurity.MainActivity.<init>(MainActivity.java:28)
02-27 13:59:43.386: E/AndroidRuntime(1903): at
java.lang.Class.newInstanceImpl(Native Method)
02-27 13:59:43.386: E/AndroidRuntime(1903): at
java.lang.Class.newInstance(Class.java:1319)
02-27 13:59:43.386: E/AndroidRuntime(1903): at
android.app.Instrumentation.newActivity(Instrumentation.java:1054)
02-27 13:59:43.386: E/AndroidRuntime(1903): at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)
02-27 13:59:43.386: E/AndroidRuntime(1903): ... 11 more
02-27 13:59:48.845: I/Process(1903): Sending signal. PID: 1903 SIG: 9
问题出在这里:
public class MainActivity extends Activity {
Button encrypt = (Button)findViewById(R.id.button1);
Button decrypt = (Button)findViewById(R.id.button2);
EditText data = (EditText)findViewById(R.id.button2);
String plainText = data.getText().toString();
}
您正在onCreate()
findViewById()
之外调用findViewById()
,因此这些视图都没有被夸大,它们还不存在。 因此,对于每个视图, findViewById()
返回null,并且data.getText()
将引发您在日志中看到的NullPointerException。
所有这些必须在setContentView
之后在onCreate
Button encrypt;
Button decrypt;
EditText data ;
String plainText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button encrypt = (Button)findViewById(R.id.button1);
Button decrypt = (Button)findViewById(R.id.button2);
EditText data = (EditText)findViewById(R.id.button2);
findViewById
在当前infalted布局中查找具有ID的视图。 因此,您需要在将布局设置为“活动”后初始化视图。
还可以从onResume中的editText获取Text
要么
在按钮上单击
plainText = data.getText().toString();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.