Created
May 10, 2017 13:44
-
-
Save yoggy/5dd65086b081ba7be657343e059c80b0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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