Java md5 密码加解密

本文介绍了一个使用AES算法进行数据加密和解密的Java实现,并提供了基于SHA1PRNG的安全密钥生成方式。同时,还展示了如何利用MD5算法进行不可逆的数据加密。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传入同一密钥如:key123456 进行加密解密

package com.pub;

import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
  
public class PwdTools{
	/**
	 * 加密
	 * 
	 * @param content
	 *            待加密内容
	 * @param key
	 *            加密的密钥
	 * @return
	 */
	public static String encrypt(String content,String key){
		try{
			KeyGenerator kgen=KeyGenerator.getInstance("AES");			
            SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" );
            secureRandom.setSeed(key.getBytes());            
			kgen.init(128,secureRandom);
			SecretKey secretKey=kgen.generateKey();
			byte[] enCodeFormat=secretKey.getEncoded();
			SecretKeySpec secretKeySpec=new SecretKeySpec(enCodeFormat,"AES");
			Cipher cipher=Cipher.getInstance("AES");
			byte[] byteContent=content.getBytes("utf-8");
			cipher.init(Cipher.ENCRYPT_MODE,secretKeySpec);
			byte[] byteRresult=cipher.doFinal(byteContent);
			StringBuffer sb=new StringBuffer();
			for(int i=0;i<byteRresult.length;i++){
				String hex=Integer.toHexString(byteRresult[i]&0xFF);
				if(hex.length()==1){
					hex='0'+hex;
				}
				sb.append(hex.toUpperCase());
			}
			return sb.toString();
		}catch(Exception e){
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 解密
	 * 
	 * @param content
	 *            待解密内容
	 * @param key
	 *            解密的密钥
	 * @return
	 */
	public static String decrypt(String content,String key){
		if(content.length()<1)
			return null;
		byte[] byteRresult=new byte[content.length()/2];
		for(int i=0;i<content.length()/2;i++){
			int high=Integer.parseInt(content.substring(i*2,i*2+1),16);
			int low=Integer.parseInt(content.substring(i*2+1,i*2+2),16);
			byteRresult[i]=(byte)(high*16+low);
		}
		try{
			KeyGenerator kgen=KeyGenerator.getInstance("AES");
            SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" );
            secureRandom.setSeed(key.getBytes());  
			kgen.init(128,secureRandom);
			SecretKey secretKey=kgen.generateKey();
			byte[] enCodeFormat=secretKey.getEncoded();
			SecretKeySpec secretKeySpec=new SecretKeySpec(enCodeFormat,"AES");
			Cipher cipher=Cipher.getInstance("AES");
			cipher.init(Cipher.DECRYPT_MODE,secretKeySpec);
			byte[] result=cipher.doFinal(byteRresult);
			return new String(result);
		}catch(Exception e){
			e.printStackTrace();
		}
		return null;
	}
	      
}

md5加密,不可解密

    public static String getMd5(String plainText) {  
        try {  
            MessageDigest md = MessageDigest.getInstance("MD5");  
            md.update(plainText.getBytes());  
            byte b[] = md.digest();  
            int i;  
            StringBuffer buf = new StringBuffer("");  
            for (int offset = 0; offset < b.length; offset++) {  
                i = b[offset];  
                if (i < 0)  
                    i += 256;  
                if (i < 16)  
                    buf.append("0");  
                buf.append(Integer.toHexString(i));  
            }  
            //32位加密  
            return buf.toString();  
            // 16位的加密  
            //return buf.toString().substring(8, 24);  
        } catch (Exception e) {  
            e.printStackTrace();  
            return null;  
        }  
    } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值