加密算法有很多一般分为对称加密(DES,AES)、非对称加密(RSA)、单向加密(MD5);
DES加密:

public class DES {    // 初始化向量,随意填充    private static byte[] iv = { 'a', 'b', 'c', 'd', 'e', 1, 2, '*' };    public static void main(String[] args) {        // 指定密匙        String key = "*()&^%$#";        // 指定需要加密的明文        String text = "4454069u =o 5h6u= bopregkljoj";        try {            // 调用DES加密方法            String encryString = DES.encryptDES(text, key);            System.out.println("DES加密结果: " + encryString);            // 调用DES解密方法            String decryString = DES.decryptDES(encryString, key);            System.out.println("DES解密结果: " + decryString);        } catch (Exception e) {            e.printStackTrace();        }    }    // DES加密    // encryptText为原文    // encryptKey为密匙    private static String encryptDES(String encryptText, String encryptKey)            throws Exception {        // 实例化IvParameterSpec对象,使用指定的初始化向量        IvParameterSpec spec = new IvParameterSpec(iv);        // 实例化SecretKeySpec类,根据字节数组来构造SecretKeySpec        SecretKeySpec key = new SecretKeySpec(encryptKey.getBytes(), "DES");        // 创建密码器        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");        // 用密码初始化Cipher对象        cipher.init(Cipher.ENCRYPT_MODE, key, spec);        // 执行加密操作        byte[] encryptData = cipher.doFinal(encryptText.getBytes());        // 返回加密后的数据        return Base64.getEncoder().encodeToString(encryptData);    }    // 解密    private static String decryptDES(String decryptString, String decryptKey)            throws Exception {        // 先使用Base64解密        byte[] base64byte = Base64.getDecoder().decode(decryptString);        // 实例化IvParameterSpec对象,使用指定的初始化向量        IvParameterSpec spec = new IvParameterSpec(iv);        // 实例化SecretKeySpec类,根据字节数组来构造SecretKeySpec        SecretKeySpec key = new SecretKeySpec(decryptKey.getBytes(), "DES");        // 创建密码器        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");        // 用密码初始化Cipher对象        cipher.init(Cipher.DECRYPT_MODE, key, spec);        // 获取解密后的数据        byte decryptedData[] = cipher.doFinal(base64byte);        // 将解密后数据转换为字符串输出        return new String(decryptedData);    }}

AES加密:

public class AES {    public static void main(String[] args) throws Exception {        // 设置加密密匙        String masterPassword = "AndroidERHJ";        // 设置原文        String originalText = "ABCDEFGHIJKLMNOPQRS547KYU,N;[HTUVWXYZ";        // 调用AES加密方法        String encryptingCode = AES.encrypt(masterPassword, originalText);        System.out.println("加密结果:" + encryptingCode);        // 调用AES解密方法        String decryString = AES.decrypt(masterPassword, encryptingCode);        System.out.println("解密结果:" + decryString);    }    // AES加密    // encryptText为要加密的内容    // seed为密匙    public static String encrypt(String seed, String encryptText)            throws Exception {        byte[] rawKey = getRawKey(seed.getBytes());        byte[] result = encrypt(rawKey, encryptText.getBytes());        return toHex(result);    }    // AES解密    // decryptText为需要解密的内容    // seed为密匙    public static String decrypt(String seed, String decryptText)            throws Exception {        byte[] rawKey = getRawKey(seed.getBytes());        byte[] enc = toByte(decryptText);        byte[] result = decrypt(rawKey, enc);        return new String(result);    }    // 加密    private static byte[] encrypt(byte[] raw, byte[] bytes) throws Exception {        // 生成一组扩展密匙,并放入一个数组之中        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");        Cipher cipher = Cipher.getInstance("AES");        // 用ENCRYPT_MODE模式,用skeySpec密码组,生成AES加密方法        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);        // 得到加密数据        byte[] encrypted = cipher.doFinal(bytes);        return encrypted;    }    // 解密    private static byte[] decrypt(byte[] rawKey, byte[] enc) throws Exception {        // 生成一组扩展密匙,并放入一个数组之中        SecretKeySpec skeyKeySpec = new SecretKeySpec(rawKey, "AES");        Cipher cipher = Cipher.getInstance("AES");        // 用DECRYPT_MODE模式,用skeySpec密码组,生成AES解密方法        cipher.init(Cipher.DECRYPT_MODE, skeyKeySpec);        // 得到解密数据        byte[] decrypted = cipher.doFinal(enc);        return decrypted;    }    // 对密匙进行编码    private static byte[] getRawKey(byte[] bytes) throws Exception {        // 获取密匙生成器        KeyGenerator kgen = KeyGenerator.getInstance("AES");        SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");        sr.setSeed(bytes);        // 生成128位的AES密码生成器        kgen.init(128, sr);        // 生成密匙        SecretKey sKey = kgen.generateKey();        // 编码格式        byte[] raw = sKey.getEncoded();        return raw;    }    // 将十六进制字符串为十进制字符串    private static String fromHex(String hex) {        return new String(toByte(hex));    }    // 将十六进制字符串为十进制字节数组    private static byte[] toByte(String hex) {        int len = hex.length() / 2;        byte[] result = new byte[len];        for (int i = 0; i < len; i++) {            result[i] = Integer.valueOf(hex.substring(2 * i, 2 * i + 2), 16)                    .byteValue();        }        return result;    }    // 把一个十进制字节数组转换成十六进制    private static String toHex(String txt) {        return toHex(txt.getBytes());    }    // 把一个十进制字节数组转换成十六进制    private static String toHex(byte[] buf) {        if (buf == null)            return "";        StringBuffer result = new StringBuffer(2 * buf.length);        for (int i = 0; i < buf.length; i++) {            appendHex(result, buf[i]);        }        return result.toString();    }    private final static String HEX = "0123456789ABCDEF";    private static void appendHex(StringBuffer result, byte b) {        result.append(HEX.charAt((b >> 4) & 0x0f)).append(HEX.charAt(b & 0X0f));    }}

MD5加密:

public class MD5 {    public static void main(String[] args) {        String md5 = toMd5("Android".getBytes());        System.out.println(md5);    }    // MD5加密    private static String toMd5(byte[] bytes) {        try {            // 实例化一个指定摘要算法为MD5的MessageDigest对象            MessageDigest algorithm = MessageDigest.getInstance("MD5");            // 重置摘要以供再次使用            algorithm.reset();            // 使用bytes跟新摘要            algorithm.update(bytes);            // 使用指定的byte数组对摘要进行最后更新,然后完成摘要计算            return toHexString(algorithm.digest(), "");        } catch (Exception e) {            e.printStackTrace();        }        return null;    }    // 将字符串中的每个字符转换为十六进制    private static String toHexString(byte[] bytes, String separtor) {        StringBuilder hexString = new StringBuilder();        for (byte b : bytes) {            String hex = Integer.toHexString(0xff & b);            if (hex.length() == 1) {                hexString.append("0");            }            hexString.append(hex).append(separtor);        }        return hexString.toString();    }}

更多相关文章

  1. android6.0 源码 系统应用之Music代码之类逻辑分析
  2. Android的源代码下载教程-android学习之旅(102)
  3. Android(安卓)Java 获取剪切板的内容,MD5加密。
  4. android调用webservice方法,参数或返回值使用服务器端类
  5. ClassLoader解析以及应用
  6. Android使用SharedPreferences实现登录帐号和密码的保存方法简介
  7. Android(安卓)Drawable 和String 相互转化
  8. Android(安卓)- 实现各种形状的ImageView
  9. Android(安卓)SDK开发 -- TitleBar重构 (代理模式-优化)

随机推荐

  1. Android(安卓)数据存储 Room
  2. android intent 5.1
  3. android启动中遇到的2个问题
  4. Android(安卓)源代码下载
  5. [置顶] Android:自定义View实现绚丽的圆形
  6. repo下载android出现fatal: Unable to fi
  7. 部分android小知识点记录
  8. Android(安卓)View.MeasureSpec
  9. Android处理图像数据转换的各种方法
  10. Android(安卓)折线图之hellocharts (饼状