Android对称加密 DES加密解密(倾情解说版)

public class DesUtil {
	//向量 可与字符串互转,比如这个数组转字符串就是"1234567890abcdef"
	private static byte[] iv = { 0x12, 0x34, 0x56, 0x78, (byte) 0x90,
			(byte) 0xAB, (byte) 0xCD, (byte) 0xEF };

	public static String decode(String key, String aaa) throws Exception {
		try {
			byte[] byteMi = Base64Utils.decode(aaa);
			//DESKeySpec 有两个构造函数:
			//DESKeySpec(byte[] key) 创建一个 DESKeySpec 对象,使用 key 中的前 8 个字节作为 DES 密钥的密钥内容。
			//DESKeySpec(byte[] key, int offset) 创建一个 DESKeySpec 对象,使用 key 中始于且包含 offset 的前 8 个字节作为 DES-EDE 密钥的密钥内容。
			//也就是说你不管多长的key,这步之后,只留前8位了
			DESKeySpec dks = new DESKeySpec(key.getBytes("utf-8"));
			//私密密钥工厂,用来将密钥(类型Key的不透明加密密钥)转换为密钥规范,反之亦然
			//只对秘密(对称)密钥进行操作
			SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
			// 根据提供的密钥规范(密钥材料)生成 SecretKey 对象。
			//返回:秘密密钥
			//抛出: InvalidKeySpecException - 如果给定密钥规范不适合生成秘密密钥的秘密密钥工厂
			Key secretKey = keyFactory.generateSecret(dks);
			//针对加解密的密码cipher功能:Cipher.getInstance("算法/模式/填充方式")
			Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
			//使用iv中的字节创建一个IvParameterSpec对象
			IvParameterSpec iv1 = new IvParameterSpec(iv);
			//加密参数的(透明)规范。此接口不包含任何方法或常量。仅用于将所有参数规范分组,并为其提供类型安全。所有参数规范都必须实现此接口
			AlgorithmParameterSpec paramSpec = iv1;
			//用密钥和一组算法参数初始化此cipher
			cipher.init(Cipher.DECRYPT_MODE, secretKey, paramSpec);
			//按单部分操作加密或解密数据,或者结束一个多部分操作
			byte[] bytes = cipher.doFinal(byteMi);
			return new String(bytes, "utf-8");

		} catch (Exception e) {
			throw new Exception(e);
		}
	}

	/**
     * DES算法,加密 
     * 
     * @param data 待加密字符串 
     * @param key  加密私钥,长度不能够小于8位 
     * @return 加密后的字节数组,一般结合Base64编码使用 
     * @throws CryptException 异常 
     */  
    public static String encode(String key,String data) throws Exception  
    {  
        try  
        {  
            DESKeySpec dks = new DESKeySpec(key.getBytes("utf-8"));  
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");  
            //key的长度不能够小于8位字节  
            Key secretKey = keyFactory.generateSecret(dks);  
            Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");  
            IvParameterSpec iv1 = new IvParameterSpec(iv);  
            AlgorithmParameterSpec paramSpec = iv1;  
            cipher.init(Cipher.ENCRYPT_MODE, secretKey,paramSpec);  
              
            byte[] bytes = cipher.doFinal(data.getBytes("utf-8"));  
              
            return Base64Utils.encode(bytes);  
        } catch (Exception e)  
        {  
            throw new Exception(e);  
        }  
    }
}

等下会再写一篇基于以上内容的 鸿蒙版的DES加解密>>>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值