上次说到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";//3DESprivate static final int ENCRYPT_MODE = Cipher.ENCRYPT_MODE;// 加密模式private static final int DECRYPT_MODE = Cipher.DECRYPT_MODE;// 解密模式private TextView tv;private byte[] datas;// 加密后的字节数组@Overrideprotected 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;}@Overridepublic 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;}}}