当前位置: 代码迷 >> 综合 >> android 3des 加密
  详细解决方案

android 3des 加密

热度:1   发布时间:2024-01-03 23:39:40.0

上次说到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;}}}


  相关解决方案