android DES加密
2016-05-26 15:17
337 查看
记住密码方便了用户的操作
也有泄漏密码的危害,所以需要对帐号信息加密处理
不多说,上代码
public class MainActivity extends Activity implements OnClickListener {
/**
* DES算法加密 注意:1.密码的长度在8位 2.构建加密/解密引擎时 DES DESKeySpec dks=new
* DESKeySpec(password.getBytes());
*/
private static final String DES_FLAG = "DES";// des算法
private static final int ENCRYPT_MODE = Cipher.ENCRYPT_MODE;// 加密模式
private static final int DECRYPT_MODE = Cipher.DECRYPT_MODE;// 解密模式
private TextView tv;
private byte[] datas;// 加密后的字节数组
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
findViewById(R.id.button1).setOnClickListener(this);
findViewById(R.id.button2).setOnClickListener(this);
}
/**
* 采用DES算法实现加密解密
*
* @param mode
* 标示加密解密 ENCRYPT_MODE DECRYPT_MODE
* @param password
* 表示当前采用des算法加解密的密钥 密码长度必须是64bit 8byte
* @param content
* 当前需要加密的明文
* @return 返回当前加密后的数据
*/
public static byte[] desEncypt(int mode, String password, byte[] content) {
byte[] bytes = null;
try {
// 1.创建生成加密/解密处理引擎对象
Cipher cipher = Cipher.getInstance(DES_FLAG);
// 2.生成对称加密的密码对象
// 2.1创建生成密码工厂实例
SecretKeyFactory factory = SecretKeyFactory.getInstance(DES_FLAG);
// 2.2 创建生成des算法加密的密码对象
DESKeySpec dks = new DESKeySpec(password.getBytes());
// 2.3生成最终的密钥
SecretKey key = factory.generateSecret(dks);
// 3.通过最终的key初始化密码引擎
cipher.init(mode, key, new SecureRandom());
// 4.进行加密解密操作 生成最终密文
bytes = cipher.doFinal(content);
} catch (InvalidKeyException e) {
// 密码无法生成
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// 指定算法不存在 异常
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// 数据没有填充密码长度不够时的异常
e.printStackTrace();
} catch (InvalidKeySpecException e) {
// //密码不符合规范 或者是内容异常
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
// 明文尺寸出现异常
e.printStackTrace();
} catch (BadPaddingException e) {
// 数据填充的异常
e.printStackTrace();
}
return bytes;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
datas = desEncypt(ENCRYPT_MODE, "12345678",
"瑞逸".getBytes());
// 通过base64编码
datas = Base64.encode(datas, Base64.DEFAULT);
tv.setText(new String(datas));
break;
case R.id.button2:
//先通过base64对密文进行解码
byte[] bytes=Base64.decode(datas, Base64.DEFAULT);
bytes=desEncypt(DECRYPT_MODE, "12345678", bytes);
if(bytes!=null && bytes.length>0){
tv.setText(new String(bytes));
}else{
tv.setText("解码失败!");
}
break;
default:
break;
}
}
}
基于des的加密
也有泄漏密码的危害,所以需要对帐号信息加密处理
不多说,上代码
public class MainActivity extends Activity implements OnClickListener {
/**
* DES算法加密 注意:1.密码的长度在8位 2.构建加密/解密引擎时 DES DESKeySpec dks=new
* DESKeySpec(password.getBytes());
*/
private static final String DES_FLAG = "DES";// des算法
private static final int ENCRYPT_MODE = Cipher.ENCRYPT_MODE;// 加密模式
private static final int DECRYPT_MODE = Cipher.DECRYPT_MODE;// 解密模式
private TextView tv;
private byte[] datas;// 加密后的字节数组
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
findViewById(R.id.button1).setOnClickListener(this);
findViewById(R.id.button2).setOnClickListener(this);
}
/**
* 采用DES算法实现加密解密
*
* @param mode
* 标示加密解密 ENCRYPT_MODE DECRYPT_MODE
* @param password
* 表示当前采用des算法加解密的密钥 密码长度必须是64bit 8byte
* @param content
* 当前需要加密的明文
* @return 返回当前加密后的数据
*/
public static byte[] desEncypt(int mode, String password, byte[] content) {
byte[] bytes = null;
try {
// 1.创建生成加密/解密处理引擎对象
Cipher cipher = Cipher.getInstance(DES_FLAG);
// 2.生成对称加密的密码对象
// 2.1创建生成密码工厂实例
SecretKeyFactory factory = SecretKeyFactory.getInstance(DES_FLAG);
// 2.2 创建生成des算法加密的密码对象
DESKeySpec dks = new DESKeySpec(password.getBytes());
// 2.3生成最终的密钥
SecretKey key = factory.generateSecret(dks);
// 3.通过最终的key初始化密码引擎
cipher.init(mode, key, new SecureRandom());
// 4.进行加密解密操作 生成最终密文
bytes = cipher.doFinal(content);
} catch (InvalidKeyException e) {
// 密码无法生成
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// 指定算法不存在 异常
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// 数据没有填充密码长度不够时的异常
e.printStackTrace();
} catch (InvalidKeySpecException e) {
// //密码不符合规范 或者是内容异常
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
// 明文尺寸出现异常
e.printStackTrace();
} catch (BadPaddingException e) {
// 数据填充的异常
e.printStackTrace();
}
return bytes;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
datas = desEncypt(ENCRYPT_MODE, "12345678",
"瑞逸".getBytes());
// 通过base64编码
datas = Base64.encode(datas, Base64.DEFAULT);
tv.setText(new String(datas));
break;
case R.id.button2:
//先通过base64对密文进行解码
byte[] bytes=Base64.decode(datas, Base64.DEFAULT);
bytes=desEncypt(DECRYPT_MODE, "12345678", bytes);
if(bytes!=null && bytes.length>0){
tv.setText(new String(bytes));
}else{
tv.setText("解码失败!");
}
break;
default:
break;
}
}
}
基于des的加密
相关文章推荐
- android studio Error:Protocol family unavailable
- picasso-强大的Android图片下载缓存库
- 动画_ _ Android应用开发之所有动画使用详解
- Android Jni使用案例
- cordova 和android studio的第一个项目(常见问题注意!)
- android 倒计时 CountDownTimer
- Android代码分析工具-Method profiling
- 安卓so动态库加载代理实现,可以实现C层的类反射效果
- Toolbar 使用
- android低版本工程(如1.5)放到高版本环境中(如2.2)如何转换
- 转:用迅雷下载Android SDK全系列
- Android根据包名启动应用
- android 总结(1)
- 两种方式实现圆形图片
- [Android]libpng error: Not a PNG file错误解决
- Android Service最全面的解析
- Android Camera使用详解
- layoutinflate.inflate方法的使用
- Android 代码混淆
- 第三方开源--Android Image Cropper--图片裁剪