java加密问题

1. MD5加密:

                            

public static void main(String[] args) throws Exception {
    MessageDigest md5 = MessageDigest.getInstance("MD5");
    BASE64Encoder base64en = new BASE64Encoder();
    String encode = base64en.encode(md5.digest("12345".getBytes("utf-8")));
    System.out.println(encode);
}

以上采用MD5加密,base64编码输出。其中12345为加密内容。不能解密,一般比对方式,先加密传递数据,在与数据库中加密字段比较。(比较常用)

            

public static void main(String[] args){
    try {
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        String s = new BigInteger(1, md5.digest("abcd123".getBytes("utf-8"))).toString(16);
        System.out.println(s);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

以上为普通的MD5加密,第一个参数 1 是正数。abcd123是要加密的内容,toString(16)中的16是16进制输出

 

2. AES加密/解密:      (可以在博客下载完整的工具类AESUtils.java)     

 

加密// AES
private static String AES = UserConstants.AES;

//data是需要加密的内容,key是密钥  通过s.getBytes()获得
public static String encrypt(byte[] data, byte[] key) {
    try {
    //实例化一个用AES加密算法的密钥生成器 
        KeyGenerator kgen = KeyGenerator.getInstance(AES); //AES是字符串
        SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
        random.setSeed(key);
        kgen.init(128, random);
        SecretKey secretKey = kgen.generateKey(); //生成加密密钥

    //对数据加密
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] result = cipher.doFinal(data);
        //对加密后的内容做base64编码
        String base64Result = Base64.getEncoder().encodeToString(result);
        return base64Result;
    } catch (NoSuchAlgorithmException e) {
        throw new IllegalArgumentException(e);
    } catch (InvalidKeyException e) {
        throw new IllegalArgumentException(e);
    } catch (Exception e) {
        throw new IllegalStateException(e);
    }
}




    //解密。decryptStr是已经加密的内容,key是密钥          
    public static String decrypt(String decryptStr, byte[] key) {
    byte[] content;
    try {
    content = Base64.getDecoder().decode(decryptStr.getBytes());
        KeyGenerator kgen = KeyGenerator.getInstance(AES);
        SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
        random.setSeed(key);
        kgen.init(128, random);
        SecretKey secretKey = kgen.generateKey();//获得加密密钥

        //解密数据
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] doFinal = cipher.doFinal(content);
        return new String(doFinal);
    } catch (NoSuchAlgorithmException e) {
        throw new IllegalArgumentException(e);
    } catch (InvalidKeyException e) {
        throw new IllegalArgumentException(e);
    } catch (Exception e) {
        throw new IllegalStateException(e);
    }
}

 

 

 

 

 

参照:https://blog.csdn.net/elim168/article/details/73456866

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值