android 3des 加密

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

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值