Skip to content

Instantly share code, notes, and snippets.

@yoggy
Created May 10, 2017 13:44
Show Gist options
  • Save yoggy/5dd65086b081ba7be657343e059c80b0 to your computer and use it in GitHub Desktop.
Save yoggy/5dd65086b081ba7be657343e059c80b0 to your computer and use it in GitHub Desktop.
package net.sabamiso.android.aestest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.io.UnsupportedEncodingException;
import java.util.Vector;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class MainActivity extends AppCompatActivity {
EditText editTextPlaneText;
EditText editTextKey;
Button buttonExec;
TextView textMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editTextPlaneText = (EditText)findViewById(R.id.editTextPlaneText);
editTextKey = (EditText)findViewById(R.id.editTextKey);
textMessage = (TextView)findViewById(R.id.textMessage);
buttonExec = (Button)findViewById(R.id.buttonExec);
buttonExec.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
process();
}
});
}
Vector<String> messages = new Vector<String>();
void msg(String str) {
int t = (int)(System.currentTimeMillis() % 1000);
messages.add(String.format("%04d:%s", t, str));
if (messages.size() > 8) {
messages.remove(0);
}
String msg = "";
for (int i = 0; i < messages.size(); ++i) {
msg += messages.get(i);
msg += "\n";
}
textMessage.setText(msg);
}
void process(){
String plane_text = editTextPlaneText.getText().toString();
String key = editTextKey.getText().toString();
String iv = "12345";
String result_enc = encrypt(plane_text, key, iv);
msg("result_enc=" + result_enc);
String result_dec = decrypt(result_enc, key, iv);
msg("result_dec=" + result_dec);
}
String encrypt(String plane_text_str, String key_str, String iv_str) {
String result_str = null;
try {
byte [] data = plane_text_str.getBytes("UTF-8");
byte [] key = getPaddingBytes(key_str);
byte [] iv = getPaddingBytes(iv_str);
SecretKeySpec secret_key_spec = new SecretKeySpec(key, "AES");
IvParameterSpec iv_parameter_spec = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secret_key_spec, iv_parameter_spec);
byte[] result = cipher.doFinal(data);
result_str = Base64.encodeToString(result, Base64.NO_WRAP| Base64.URL_SAFE);
}
catch(Exception e) {
e.printStackTrace();
}
return result_str;
}
String decrypt(String aes_base64_str, String key_str, String iv_str) {
String result_str = null;
try {
byte [] encrypted_data = Base64.decode(aes_base64_str, Base64.NO_WRAP| Base64.URL_SAFE);
byte [] key = getPaddingBytes(key_str);
byte [] iv = getPaddingBytes(iv_str);
SecretKeySpec secret_key_spec = new SecretKeySpec(key, "AES");
IvParameterSpec iv_parameter_spec = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secret_key_spec, iv_parameter_spec);
byte[] result = cipher.doFinal(encrypted_data);
result_str = new String(result, "UTF-8");
}
catch(Exception e) {
e.printStackTrace();
}
return result_str;
}
byte [] getPaddingBytes(String str) {
byte [] padding_data = null;
try {
byte [] data = str.getBytes("UTF-8");
int size = (data.length / 16 + 1) * 16;
padding_data = new byte[size];
System.arraycopy(data, 0, padding_data, 0, data.length);
}
catch (Exception e) {
e.printStackTrace();
}
return padding_data;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment