您的位置:首页 > 移动开发 > Android开发

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的加密
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: