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

android 3des 加密

2016-05-26 15:20 495 查看
上次说到des加密

这里给出3des 加密

代码public class MainActivity2 extends Activity implements OnClickListener {
/**
*3DES算法加密 des算法的升级
* 注意: 1.密码的长度是24位
* 2.构建加密/解密引擎时 DESede
* 3.DESedeKeySpec dks=new DESedeKeySpec(password.getBytes());
*/

private static final String DES_FLAG="DESede";//3DES
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);
}

/**
* 采用3DES算法实现加密解密
*
* @param mode
* 标示加密解密 ENCRYPT_MODE DECRYPT_MODE
* @param password
* 表示当前采用des算法加解密的密钥 密码长度必须是192bit 24byte
* @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算法加密的密码对象
DESedeKeySpec dks=new DESedeKeySpec(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, "123456781234567812345678",
"瑞逸".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, "123456781234567812345678", bytes);
if(bytes!=null && bytes.length>0){
tv.setText(new String(bytes));
}else{
tv.setText("解码失败!");
}
break;

default:
break;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: