Android的对称加密与Base64加密
来源:互联网 发布:淘宝金店可以买吗 编辑:程序博客网 时间:2024/05/01 08:44
对称加密是最快速、最简单的一种加密方式,加密(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)); }}
0 0
- Android的对称加密与Base64加密
- Android的对称加密与Base64加密
- 基于Base64的对称加密
- 网络安全知识之对称加密与base64
- Android的非对称加密与MD5加密
- Android的非对称加密与MD5加密
- Android - Base64加密与解密
- Android与服务器交互的方式中的对称加密和非对称加密
- 非对称加密(RSA)与对称加密(AES)的应用
- 对称加密与非对称加密的区别
- 对称加密与非对称加密,以及RSA的原理
- 细数非对称加密与对称加密的区别
- BASE64 的加密与解密
- Base64的加密与解密
- Base64的加密与解密
- 对称加密与非对称加密理解和非对称加密的java例子
- Android安全加密:对称加密
- Android 安全加密:对称加密
- ios升级https记录
- Http协议详解
- ShareSDK安装了微信QQ一直报错未安装客户端
- 使用javamail技术实现后台邮件发送功能
- 【Android 基础】Animation 动画介绍和实现
- Android的对称加密与Base64加密
- edittext焦点自动获取问题解决
- 离线轻量级大数据平台Spark之读取CSV文件实例
- TCP的状态 (SYN, FIN, ACK, PSH, RST, URG)
- [Deep Learning-03]DQN for Flappybirld
- 欢迎使用CSDN-markdown编辑器
- 人工智能在对冲基金的崛起
- markdown reference , not open
- Android实时监听是否有网络,常驻广播——监测网络变化