对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。常用的对称加密方式为:DES,AES。
DES的加密解密实例:
- public class MainActivity extends AppCompatActivity {
- private EditText des_input;
- private EditText des_password;
- private TextView show_des_encrypt;
- private TextView show_des_decrypt;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- initView();
- }
- private void initView() {
- des_input = ((EditText) findViewById(R.id.des_input));
- des_password = ((EditText) findViewById(R.id.des_password));
- show_des_encrypt = ((TextView) findViewById(R.id.show_des_encrypt));
- show_des_decrypt = ((TextView) findViewById(R.id.show_des_decrypt));
- }
- /**
- * DES 加密
- * @param view
- */
- public void btnDESEncrypt(View view) {
- //将DES加密写成工具类
- // 要加密内容
- byte[] data = des_input.getText().toString().getBytes();
- byte[] password = des_password.getText().toString().getBytes();
- //工具类DESUtils中方法encrypt返回值是什么类型
- byte[] result = DESUtils.encrypt(data, password);
- //处理加密结果
- byte[] encode = Base64.encode(result, Base64.DEFAULT);
- //显示一下加密的结果
- show_des_encrypt.setText(new String(encode));
- }
- /**
- * DES 进行解密
- * @param view
- */
- public void btnDESDecrypt(View view) {
- //获取解密的数据
- byte[] data = show_des_encrypt.getText().toString().getBytes();
- byte[] decode = Base64.decode(data, Base64.DEFAULT);
- //获取密码
- byte[] password = des_password.getText().toString().getBytes();
- byte[] result = DESUtils.decrypt(decode,password);
- //对解密数据进行处理
- show_des_decrypt.setText(new String(result));
- }
- }
- public class DESUtils {
- public static byte[] encrypt(byte[] data, byte[] password) {
- byte[] ret = null;
- //判断参数是否符合条件
- if(data!=null&&data.length>0){
- if(password!=null&&password.length==8){
- try {
- //1、创造加密引擎
- Cipher cipher = Cipher.getInstance("DES");
- //2、初始化
- SecretKeySpec key = new SecretKeySpec(password,"DES");
- cipher.init(Cipher.ENCRYPT_MODE,key);
- //3、对数据进行加密
- ret =cipher.doFinal(data);
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (NoSuchPaddingException e) {
- e.printStackTrace();
- } catch (InvalidKeyException e) {
- e.printStackTrace();
- } catch (BadPaddingException e) {
- e.printStackTrace();
- } catch (IllegalBlockSizeException e) {
- e.printStackTrace();
- }
- }
- }
- return ret;
- }
- public static byte[] decrypt(byte[] data, byte[] password) {
- byte[] ret = null;
- if(data!=null&&data.length>0){
- if(password!=null&&password.length==8){
- try {
- //1、获取解密引擎
- Cipher cipher =Cipher.getInstance("DES");
- //2、初始化
- SecretKeySpec key = new SecretKeySpec(password,"DES");
- cipher.init(Cipher.DECRYPT_MODE,key);
- //3、解密
- ret = cipher.doFinal(data);
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (NoSuchPaddingException e) {
- e.printStackTrace();
- } catch (InvalidKeyException e) {
- e.printStackTrace();
- } catch (BadPaddingException e) {
- e.printStackTrace();
- } catch (IllegalBlockSizeException e) {
- e.printStackTrace();
- }
- }
- }
- return ret;
- }
- }
AES的加密解密实例:
注意:输入的password和ivParams为16位
- public class AESUtils {
- public static byte[] encrypt(byte[] data, byte[] password) {
- byte[] ret = null;
- if(data!=null&&data.length>0){
- if(password!=null&&password.length==16){
- try {
- //1、创造加密引擎
- Cipher cipher = Cipher.getInstance("AES");
- //2、初始化,无法使用SecretKeyFactory
- SecretKeySpec key = new SecretKeySpec(password,"AES");
- cipher.init(Cipher.ENCRYPT_MODE,key);
- //3、加密
- ret = cipher.doFinal(data);
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (NoSuchPaddingException e) {
- e.printStackTrace();
- } catch (InvalidKeyException e) {
- e.printStackTrace();
- } catch (BadPaddingException e) {
- e.printStackTrace();
- } catch (IllegalBlockSizeException e) {
- e.printStackTrace();
- }
- }
- }
- return ret;
- }
- public static byte[] decrypt(byte[] data, byte[] password) {
- byte[] ret = null;
- if(data!=null&&data.length>0){
- if(password!=null&&password.length==16){
- try {
- //1、创造加密引擎
- Cipher cipher = Cipher.getInstance("AES");
- //2、初始化,无法使用SecretKeyFactory
- SecretKeySpec key = new SecretKeySpec(password,"AES");
- cipher.init(Cipher.DECRYPT_MODE,key);
- //3、加密
- ret = cipher.doFinal(data);
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (NoSuchPaddingException e) {
- e.printStackTrace();
- } catch (InvalidKeyException e) {
- e.printStackTrace();
- } catch (BadPaddingException e) {
- e.printStackTrace();
- } catch (IllegalBlockSizeException e) {
- e.printStackTrace();
- }
- }
- }
- return ret;
- }
- /**
- * AES 第二种加密算法
- * @param data
- * @param password
- * @param ivParams
- * @return
- */
- public static byte[] encrypt2(byte[] data, byte[] password, byte[] ivParams) {
- byte[] ret = null;
- if(data!=null&&data.length>0){
- if(password!=null&&password.length==16&&ivParams!=null&&ivParams.length==16){
- try {
- //1、创造加密引擎,CBC:加密模式;PKCS5Padding:填充模式
- Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
- //2、初始化,无法使用SecretKeyFactory
- SecretKeySpec key = new SecretKeySpec(password,"AES");
- //相当于第二个密码,向量参数,加密级别更高
- IvParameterSpec iv_params = new IvParameterSpec(ivParams);
- cipher.init(Cipher.ENCRYPT_MODE,key,iv_params);
- //3、加密
- ret = cipher.doFinal(data);
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (NoSuchPaddingException e) {
- e.printStackTrace();
- } catch (InvalidKeyException e) {
- e.printStackTrace();
- } catch (BadPaddingException e) {
- e.printStackTrace();
- } catch (IllegalBlockSizeException e) {
- e.printStackTrace();
- } catch (InvalidAlgorithmParameterException e) {
- e.printStackTrace();
- }
- }
- }
- return ret;
- }
- }
- public class MainActivity extends AppCompatActivity {
- private EditText aes_input;
- private EditText aes_password;
- private TextView show_aes_decrypt;
- private TextView show_aes_encrypt;
- private byte[] password;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- initView();
- }
- private void initView() {
- aes_input = ((EditText) findViewById(R.id.aes_input));
- aes_password = ((EditText) findViewById(R.id.aes_password));
- show_aes_encrypt = ((TextView) findViewById(R.id.show_aes_encrypt));
- show_aes_decrypt = ((TextView) findViewById(R.id.show_aes_decrypt));
- }
- public void qqq(View view) {
- byte[] data = aes_input.getText().toString().getBytes();
- password = aes_password.getText().toString().getBytes();
- //采用第二套加密算法,需要一个向量参数,相当于另一套密码
- //指定向量参数(密码)
- String iv = "0123456789abcdef";
- //提供一个向量参数
- byte[] ivParams = iv.getBytes();
- byte[] result = AESUtils.encrypt2(data,password,ivParams);
- //对返回来的结果进行处理,显示
- byte[] encode = Base64.encode(result, Base64.DEFAULT);
- show_aes_encrypt.setText(new String(encode));
- }
- public void www(View view) {
- byte[] data = show_aes_encrypt.getText().toString().getBytes();
- //对data进行处理
- data = Base64.decode(data,Base64.DEFAULT);
- byte[] result = AESUtils.decrypt(data,password);
- if (result != null) {
- show_aes_decrypt.setText(new String(result));
- }else {
- show_aes_decrypt.setText("解密失败");
- }
- }
- }
Base64加密实例:
- public class Base64Activity extends AppCompatActivity {
- private EditText input;
- private TextView show_base64_encode;
- private TextView show_base64_decode;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_base64);
- initView();
- // initData();
- }
- private void initData() {
- String input = this.input.getText().toString();
- if (input != null) {
- byte[] bytes = input.getBytes();
- byte[] encode = Base64.encode(bytes, 0, bytes.length, Base64.NO_WRAP);
- //显示咱们编码的内容
- show_base64_encode.setText(new String(encode));
- }
- }
- private void initView() {
- input = ((EditText) findViewById(R.id.input));
- show_base64_encode = ((TextView) findViewById(R.id.show_base64_encode));
- show_base64_decode = ((TextView) findViewById(R.id.show_base64_decode));
- }
- /**
- * 进行Base64编码
- * @param view
- */
- public void btnBase64Encode(View view) {
- String input = this.input.getText().toString();
- if (input != null) {
- byte[] bytes = input.getBytes();
- byte[] encode = Base64.encode(bytes, 0, bytes.length, Base64.NO_WRAP);
- //Base64,在进行编码时采用什么样的格式进行编码,建议大家解码时就采用什么样的形式进行解码
- //保证数据万无一失,没有错误,肯定是这种逻辑
- String encodeToString = Base64.encodeToString(bytes, 0, bytes.length, Base64.NO_WRAP);
- //显示咱们编码的内容
- // show_base64_encode.setText(new String(encode));
- show_base64_encode.setText(encodeToString);
- }
- }
- /**
- * 进行Base64解密
- * @param view
- */
- public void btnBase64Decode(View view) {
- String str = show_base64_encode.getText().toString();
- byte[] decode = Base64.decode(str, Base64.DEFAULT);
- byte[] decode1 = Base64.decode(str.getBytes(), 0, str.getBytes().length, Base64.DEFAULT);
- show_base64_decode.setText(new String(decode1));
- }
- }