Android项目经验 1、存入SD卡数据的加密与解密

文章转自 :https://www.jianshu.com/p/07aaa6db11ff
前言:该功能实际是对文件存储的数据进行加密的环节,保证APP写入文件数据的安全性。

方式:MD5加密并转换为十六进制

MD5工具类

import java.security.MessageDigest;

public class MD5Utils {
    private static final String hexDigIts[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};

    /**
     * MD5加密数据,32位
     */
    public static String MD5Encode(String value) {
        String resultString = null;
        try {
            resultString = new String(value);
            MessageDigest md = MessageDigest.getInstance("MD5");
            resultString = byteArrayToHexString(md.digest(resultString.getBytes("UTF-8")));
        } catch (Exception e) {
        }
        return resultString;
    }


    /**
     * MD5加密后解密(一定要KL()再用KL()解密)
     * MD5是不可逆,这里的加密解密,你可以看到是对MD5算法先加密后解密,而不是对MD5的解密
     *
     * @param value
     * @return
     */
    public static String MD5Decrypt(String value) {
        char[] a = value.toCharArray();
        for (int i = 0; i < a.length; i++) {
            a[i] = (char) (a[i] ^ 't');
        }
        String k = new String(a);
        return k;
    }


    // 可逆的加密算法
    public static String KL(String inStr) {
        // String s = new String(inStr);
        char[] a = inStr.toCharArray();
        for (int i = 0; i < a.length; i++) {
            a[i] = (char) (a[i] ^ 't');
        }
        String s = new String(a);
        return s;
    }


    public static String byteArrayToHexString(byte b[]) {
        StringBuffer resultSb = new StringBuffer();
        for (int i = 0; i < b.length; i++) {
            resultSb.append(byteToHexString(b[i]));
        }
        return resultSb.toString();
    }

    public static String byteToHexString(byte b) {
        int n = b;
        if (n < 0) {
            n += 256;
        }
        int d1 = n / 16;
        int d2 = n % 16;
        return hexDigIts[d1] + hexDigIts[d2];
    }
}

使用:对数据进行MD5加密

    /**
     * MD5使用
     * MD5是不可逆,这里的加密解密,你可以看到是对MD5算法先加密后解密,而不是对MD5的解密
     */
    private void initMD5() {
        String value = "123456";
        Log.d("LUO","MD5原数据============"+value);
        //加密的MD5
        String md5Encode = MD5Utils.MD5Encode(value);
        Log.d("LUO","MD5加密后数据============"+md5Encode);

        //对解密的MD5,再加密
        String md5Encode_kl = MD5Utils.KL(MD5Utils.MD5Encode(value));
        Log.d("LUO","MD5_kl加密后数据============"+md5Encode_kl);
        //对解密的MD5,解加密
        String decrypt = MD5Utils.MD5Decrypt(md5Encode_kl);
        Log.d("LUO","MD5_kl解密后数据============"+decrypt);

//        LUO: MD5原数据============123456
//        LUO: MD5加密后数据============e10adc3949ba59abbe56e057f20f883e
//        LUO: MD5_kl加密后数据============�ED���GM@M��AM����AB�DAC�FD�LLG�
//        LUO: MD5_kl解密后数据============e10adc3949ba59abbe56e057f20f883e
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值