android base64 和 aes 加密 解密
package pioneerbarcode.ccw.com.encryptanddecode; import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Base64;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; import pioneerbarcode.ccw.com.encryptanddecode.utils.AesUtils; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btnBase64New;
private Button btnBase64Older;
private TextView tvOlder;
private String strOlderData;
private TextView tvJiaMiData;
private TextView tvJieMiData;
private Button btnAesJiaMi;
private Button btnAesjieMi;
private TextView tvAesJiaMiData;
private TextView tvAesJieMiData;
private static String AESPASSWORD = "hehehe";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setView();
setListener();
} private void setListener() {
btnBase64New.setOnClickListener(this);
btnBase64Older.setOnClickListener(this);
btnAesJiaMi.setOnClickListener(this);
btnAesjieMi.setOnClickListener(this);
} private void setView() {
btnBase64New = (Button) findViewById(R.id.btn_base64_jiemi);
btnBase64Older = (Button) findViewById(R.id.btn_base64_jiami);
tvOlder = (TextView) findViewById(R.id.tv_older);
tvJiaMiData = (TextView) findViewById(R.id.tv_jiami_data);
tvJieMiData = (TextView) findViewById(R.id.tv_jiemi_data); btnAesJiaMi = (Button) findViewById(R.id.btn_Aes_jiami);
btnAesjieMi = (Button) findViewById(R.id.btn_Aes_jiemi);
tvAesJiaMiData = (TextView) findViewById(R.id.tv_Aes_jiami_data);
tvAesJieMiData = (TextView) findViewById(R.id.tv_Aes_jiemi_data); strOlderData = tvOlder.getText().toString().trim();
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_base64_jiemi:
//base64 解密
base64Decode();
break;
case R.id.btn_base64_jiami:
//Base64加密
base64Encrypt();
break;
case R.id.btn_Aes_jiami:
//Aes 加密
aesEncrypt();
break;
case R.id.btn_Aes_jiemi:
//Aes 解密
aesDecode();
break;
default:
break;
}
} /**
* Aes 解密
*/
private void aesDecode() {
try {
if (!TextUtils.isEmpty(tvAesJiaMiData.getText().toString().toString().trim())) {
// Aes 解密后的数据
String data = AesUtils.decrypt(AESPASSWORD, tvAesJiaMiData.getText().toString().trim());
tvAesJieMiData.setText(data);
}
} catch (Exception e) {
e.printStackTrace();
}
} /**
* Aes 加密
*/
private void aesEncrypt() {
try {
String data = AesUtils.encrypt(AESPASSWORD, strOlderData);
//加密后的串
tvAesJiaMiData.setText(data);
} catch (Exception e) {
e.printStackTrace();
}
} /**
* base64解密
*/
private void base64Decode() {
if (!TextUtils.isEmpty(tvJiaMiData.getText().toString().trim())) {
String data = new String(Base64.decode(tvJiaMiData.getText().toString().trim().getBytes(), Base64.DEFAULT));
tvJieMiData.setText(data);
}
} /**
* base64加密
*/
private void base64Encrypt() {
//下面是两种方式 加密
//// 在这里使用的是encode方式,返回的是byte类型加密数据,可使用new String转为String类型
// String olderData_base64 = new String(Base64.encode(strOlderData.getBytes(), Base64.DEFAULT));
//// 加密传入的数据是byte类型的,并非使用decode方法将原始数据转二进制,String类型的数据 使用 str.getBytes()即可
String olderData_base64 = Base64.encodeToString(strOlderData.getBytes(), Base64.DEFAULT);
tvJiaMiData.setText(olderData_base64);
} }
public class AesUtils {
public static String encrypt(String seed, String cleartext) throws Exception {
byte[] rawKey = getRawKey(seed.getBytes());
byte[] result = encrypt(rawKey, cleartext.getBytes());
return toHex(result);
}
public static String decrypt(String seed, String encrypted) throws Exception {
byte[] rawKey = getRawKey(seed.getBytes());
byte[] enc = toByte(encrypted);
byte[] result = decrypt(rawKey, enc);
return new String(result);
}
private static byte[] getRawKey(byte[] seed) throws Exception {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");
sr.setSeed(seed);
kgen.init(128, sr); // 192 and 256 bits may not be available
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
return raw;
}
private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec,new IvParameterSpec(new byte[cipher.getBlockSize()]));
byte[] encrypted = cipher.doFinal(clear);
return encrypted;
}
private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec,new IvParameterSpec(new byte[cipher.getBlockSize()]));
byte[] decrypted = cipher.doFinal(encrypted);
return decrypted;
}
private static String toHex(String txt) {
return toHex(txt.getBytes());
}
private static String fromHex(String hex) {
return new String(toByte(hex));
}
private static byte[] toByte(String hexString) {
int len = hexString.length()/2;
byte[] result = new byte[len];
for (int i = 0; i < len; i++)
result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2), 16).byteValue();
return result;
}
private static String toHex(byte[] buf) {
if (buf == null)
return "";
StringBuffer result = new StringBuffer(2*buf.length);
for (int i = 0; i < buf.length; i++) {
appendHex(result, buf[i]);
}
return result.toString();
}
private final static String HEX = "0123456789ABCDEF";
private static void appendHex(StringBuffer sb, byte b) {
sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f));
}
}
经过验证可用
android base64 和 aes 加密 解密的更多相关文章
- iOS,Android,Jave后台AES加密解密
AES256 在iOS和Android上的相关代码: http://www.tuicool.com/articles/RVFbmmU 里面可以下载相关的代码. 我们遇到的问题是: 把Android的代 ...
- Android数据加密之Aes加密
前言: 项目中除了登陆,支付等接口采用rsa非对称加密,之外的采用aes对称加密,今天我们来认识一下aes加密. 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes ...
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]
原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...
- ruby AES加密解密
最近和京东合作做一个项目,在接口对接传递参数时,参数需要通过AES加密解密. 本来想到用gem 'aescrypt'处理,但是aescrypt的编码方式用的base64,而京东那边用的是16进制.所以 ...
- openssl与cryptoAPI交互AES加密解密
继上次只有CryptoAPI的加密后,这次要实现openssl的了 动机:利用CryptoAPI制作windows的IE,火狐和chrome加密控件后,这次得加上与android的加密信息交互 先前有 ...
- java使用AES加密解密 AES-128-ECB加密
java使用AES加密解密 AES-128-ECB加密 import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; impo ...
- AES加密解密——AES在JavaWeb项目中前台JS加密,后台Java解密的使用
一:前言 在软件开发中,经常要对数据进行传输,数据在传输的过程中可能被拦截,被监听,所以在传输数据的时候使用数据的原始内容进行传输的话,安全隐患是非常大的.因此就要对需要传输的数据进行在客户端进行加密 ...
- php与java通用AES加密解密算法
AES指高级加密标准(Advanced Encryption Standard),是当前最流行的一种密码算法,在web应用开发,特别是对外提供接口时经常会用到,下面是我整理的一套php与java通用的 ...
- .Net Core AES加密解密
一.AES说明 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替 ...
随机推荐
- slideDoor(学习某编程网站的,仅作记录和学习)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- mybatis入门_mybatis基本原理以及入门程序
一.传统jdbc存在的问题 1.创建数据库的连接存在大量的硬编码, 2.执行statement时存在硬编码. 3.频繁的开启和关闭数据库连接,会严重影响数据库的性能,浪费数据库的资源. 4.存在大量的 ...
- 【java基础】面向对象的三大基本特征之-------继承
面向对象的三大特征:封装,继承,多态 java通过extends关键字来实现继承,而且是单继承,一个子类只可以有一个直接父类,但是父类还可以有父类... java.long.Object是所有类的父类 ...
- Android中实现全屏、无标题栏的两种办法
在进行UI设计时,我们经常需要将屏幕设置成无标题栏或者全屏.要实现起来也非常简单,主要有两种方法:配置xml文件和编写代码设置. 1.在xml文件中进行配置 在项目的清单文件AndroidManife ...
- iOS开发 滤镜的使用
iOS开发之滤镜的使用技巧(CoreImage) 一.滤镜的内容和效果是比较多并且复杂的 ,学习滤镜需要技巧 如下: 两个输出语句解决滤镜的属性选择问题: 1.查询效果分类中包含什么效果按住com ...
- 解决Mac下MX4手机无法连接adb问题之解决方案
一般的android连接mac 很方便不用安装驱动就可以啦,可是不知道为什么特殊情况下有的android手机(小米2,华为等)就是连接不上,下来就说说特殊情况下如何连接. 使用USB连接安卓手机后可以 ...
- mac命令学习记录
1. 查找程序运行路径: which xxxx 2. 查找文件安装路径: whereis xxxx; 3. 编辑配置文件:vi ./.xxx : 进入需要编辑的文件: i 进行编辑 :输入:wq ...
- ps切图抠图详解-web前端(转)
网页设计在技术层面上,第一步是美工做出网页效果图,第二步就是网页前端进行网页切图.网页切图工具常用的有fireworks.PS,这里使用PS进行网页切图. 我们通过设计稿,得到我们想要的产出物(如.p ...
- loadrunner随笔1
快捷键: 注释快捷键: ctrl+alt+c 取消注释快捷键:ctrl+alt+u 开始录制快捷键: ctrl+r 运行时设置快捷键: f4 录制设置: ctrl + f7 查找和替换:ctrl + ...
- .NET跨平台之mac 下vs code 多层架构编程
合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入,申请备注填写姓名+技术+工作年限) Q Q:408365330 E-Mail:eg ...