【Android】Android加密和解密方式

一、不可逆加密

不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。
如信息摘要(Message Digest)和安全散列(Secure Hash)算法属于此类,常见的算法包括 MD5、SHA1、PBKDF2、bcrypt 等。
特点:
使用MD5和SHA进行加解密:

// MD5加密
private static String toMd5(String str) {
   

    // 实例化一个指定摘要算法为MD5的MessageDigest对象
 MessageDigest algorithm;
    try {
   
        algorithm = MessageDigest.getInstance("MD5");
        // 重置摘要以供再次使用
 algorithm.reset();
        // 使用bytes更新摘要
 algorithm.update(str.getBytes());
        // 使用指定的byte数组对摘要进行最后更新,然后完成摘要计算
 return toHexString(algorithm.digest(), "");
    } catch (NoSuchAlgorithmException e) {
   
        e.printStackTrace();
    }

    return null;
}

// SHA加密
private static String toSHA(String str) {
   
    // 实例化一个指定摘要算法为SHA的MessageDigest对象
 MessageDigest algorithm;
    try {
   
        algorithm = MessageDigest.getInstance("SHA");
        // 重置摘要以供再次使用
 algorithm.reset();
        // 使用bytes更新摘要
 algorithm.update(str.getBytes());
        // 使用指定的byte数组对摘要进行最后更新,然后完成摘要计算
 return toHexString(algorithm.digest(), "");
    } catch (NoSuchAlgorithmException 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();
}

二、可逆加密

算法加密

基于算法的加密算法,也被称为古典加密算法,如 HTTP 认证中的 base64,是一种基于64个基本字符,加密后的内容只包含这64个字符,加密后长度会变大。它是最简单的一种算法,一般用于加密URL.
下图为Base64编码表

Base64加解密相关代码

// 需要引入包:java.util.Base64 
// Base64加密
private static String encode(String str) {
   
    byte[] encodeBytes = Base64.getEncoder().encode(str.getBytes());
    return new String(encodeBytes);
}

// Base64解密
private static String decode(String str) {
   
    byte[] decodeBytes = Base64.getDecoder().decode(str.getBytes());
    return new String(decodeBytes);
}

对称加密

对称加密:加密和解密的密钥一样。常见的对称加密算法有 DES、3DES、AES。这三者的关系可以理解为迭代和替代。3DES是对DES的发展,AES是为了替代DES.
DES加解密相关代码

public class DESUtil {
   
    // 初始化向量
 private static byte[] iv = {
    'a', 'b', 'c', 'd', 'e', 1, 2, '*' };

    // 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
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值