android DES加密

记住密码方便了用户的操作

也有泄漏密码的危害,所以需要对帐号信息加密处理

不多说,上代码

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的加密

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值