zoukankan      html  css  js  c++  java
  • jdk自带的MD5进行数据的加密与解密

    package com.tools.util;
    
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.security.InvalidKeyException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    import javax.crypto.Cipher;
    import javax.crypto.Mac;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;
    
    /**
     * ClassName:MD5Util <br/>
     * Function: 使用jdk自带的MD5进行数据的加密与解密 <br/>
     * Reason: 主要用来生成用户密码存入数据库中 <br/>
     * 
     * @version 1.0
     * @since JDK 1.7
     * @see
     */
    public class EncryptUtil {
    	private static final Log logger = LogFactory.getLog(EncryptUtil.class);
    	
    	private static final String SHA = "SHA";
    	private static final String SHA1 = "SHA1";
    	private static final String MD5 = "MD5";
    	private static final String HMAC_SHA1 = "HmacSHA1";
    	
    	public static String Encrypt(String algorithm, String source) {
    		MessageDigest md5 = null;
    		try {
    			md5 = MessageDigest.getInstance(algorithm);
    		} catch (Exception e) {
    			logger.debug(e.getMessage());
    			return "";
    		}
    		char[] charArray = source.toCharArray();
    		byte[] byteArray = new byte[charArray.length];
    
    		for (int i = 0; i < charArray.length; i++)
    			byteArray[i] = (byte) charArray[i];
    
    		byte[] md5Bytes = md5.digest(byteArray);
    
    		StringBuffer hexValue = new StringBuffer();
    
    		for (int i = 0; i < md5Bytes.length; i++) {
    			int val = ((int) md5Bytes[i]) & 0xff;
    			if (val < 16)
    				hexValue.append("0");
    			hexValue.append(Integer.toHexString(val));
    		}
    
    		return hexValue.toString();
    	}
    
    	/**
    	 * SHA加密 并转换为16进制大写字符串
    	 * @param source
    	 * @return
    	 */
    	public static String encryptSHA(String source)
    	{
    		try {
    			MessageDigest sha = MessageDigest.getInstance(SHA);  
    			sha.update(source.getBytes());
    			byte[] bytes = sha.digest();
    			
    			StringBuilder stringBuilder = new StringBuilder("");  
    	        if (bytes == null || bytes.length <= 0) {  
    	            return null;  
    	        }  
    	        for (int i = 0; i < bytes.length; i++) {  
    	            int v = bytes[i] & 0xFF;  
    	            String hv = Integer.toHexString(v);  
    	            if (hv.length() < 2) {  
    	                stringBuilder.append(0);  
    	            }  
    	            stringBuilder.append(hv);  
    	        }  
    	        return stringBuilder.toString().toUpperCase();  
    	        
    		} catch (NoSuchAlgorithmException e) {
    			e.printStackTrace();
    		}  
            
            return "";
    	}
    	
    	/**
    	 * SHA加密 并转换为16进制大写字符串
    	 * @param source
    	 * @return
    	 */
    	public static String encryptSHA1(String source)
    	{
    		try {
    			MessageDigest sha = MessageDigest.getInstance(SHA1);  
    			sha.update(source.getBytes());
    			byte[] bytes = sha.digest();
    			
    			StringBuilder stringBuilder = new StringBuilder("");  
    	        if (bytes == null || bytes.length <= 0) {  
    	            return null;  
    	        }  
    	        for (int i = 0; i < bytes.length; i++) {  
    	            int v = bytes[i] & 0xFF;  
    	            String hv = Integer.toHexString(v);  
    	            if (hv.length() < 2) {  
    	                stringBuilder.append(0);  
    	            }  
    	            stringBuilder.append(hv);  
    	        }  
    	        return stringBuilder.toString().toUpperCase();  
    	        
    		} catch (NoSuchAlgorithmException e) {
    			e.printStackTrace();
    		}  
            
            return "";
    	}
    	
    	/**         
         * BASE64加密   
         * @param key          
         * @return          
         * @throws Exception          
         */              
        public static String encryptBASE64(byte[] key) {               
            return filter((new BASE64Encoder()).encodeBuffer(key));               
        }  
        
        /**    
         * BASE64解密   
         * @param key          
         * @return          
         * @throws IOException       
         */              
        public static byte[] decryptBASE64(String key) throws IOException {               
            return (new BASE64Decoder()).decodeBuffer(key);               
        }  
        
        /**
         * 删除BASE64加密时出现的换行符
         * <功能详细描述>
         * @param str
         * @return
         * @see [类、类#方法、类#成员]
         */
        private static String filter(String str) {
            String output = null;
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < str.length(); i++) {
                int asc = str.charAt(i);
                if (asc != 10 && asc != 13) {
                    sb.append(str.subSequence(i, i + 1));
                }
            }
            output = new String(sb);
            return output;
        }
    	
        /**
    	 * MD5 加密
    	 */
    	public static String getMD5Str(String str) {
    		MessageDigest messageDigest = null;
    
    		try {
    			messageDigest = MessageDigest.getInstance(MD5);
    
    			messageDigest.reset();
    
    			messageDigest.update(str.getBytes("UTF-8"));
    
    		} catch (NoSuchAlgorithmException e) {
    			System.out.println("NoSuchAlgorithmException caught!");
    			System.exit(-1);
    		} catch (UnsupportedEncodingException e) {
    			e.printStackTrace();
    		}
    
    		byte[] byteArray = messageDigest.digest();
    
    		StringBuffer md5StrBuff = new StringBuffer();
    
    		for (int i = 0; i < byteArray.length; i++) {
    			if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
    				md5StrBuff.append("0").append(
    						Integer.toHexString(0xFF & byteArray[i]));
    			else
    				md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
    		}
    
    		return md5StrBuff.toString();
    	}
        
    	/**
    	 * 加密
    	 * @param encData 要加密的数据
    	 * @param secretKey 密钥 ,16位的数字和字母
    	 * @param vector 初始化向量,16位的数字和字母
    	 * @return
    	 * @throws Exception
    	 */
    	public static String Encrypt(String encData ,String secretKey,String vector) throws Exception {
    		
    		if(secretKey == null) {
    			return null;
    		}
    		if(secretKey.length() != 16) {
    			return null;
    		}
    		byte[] raw = secretKey.getBytes();
    		SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    		Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");// "算法/模式/补码方式"
    		IvParameterSpec iv = new IvParameterSpec(vector.getBytes());// 使用CBC模式,需要一个向量iv,可增加加密算法的强度
    		cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
    		byte[] encrypted = cipher.doFinal(encData.getBytes());
    		return ObjectSerializer.encodeBytes( encrypted );
    	}
    	
    	/**   
         * 生成签名数据    
         * @param data 待加密的数据   
         * @param key  加密使用的key   
         * @throws InvalidKeyException   
         * @throws NoSuchAlgorithmException   
         */    
        public static  byte[] getSignature(String data,String key) throws NoSuchAlgorithmException, InvalidKeyException {
            byte[] keyBytes=key.getBytes();  
            SecretKeySpec signingKey = new SecretKeySpec(keyBytes, HMAC_SHA1);     
            Mac mac = Mac.getInstance(HMAC_SHA1);     
            mac.init(signingKey);
            //byte[] rawHmac = mac.doFinal(("GET&"+data).getBytes());  
            byte[] rawHmac = mac.doFinal((data).getBytes());  
    /*        StringBuilder sb=new StringBuilder();  
            for(byte b:rawHmac){  
             sb.append(byteToHexString(b));  
            }  */
            return rawHmac;     
        }  
        
        private static String byteToHexString(byte ib){  
            char[] Digit={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};  
            char[] ob=new char[2];  
            ob[0]=Digit[(ib>>>4)& 0X0f];  
            ob[1]=Digit[ib & 0X0F];  
            String s=new String(ob);  
            return s;           
        } 
    	
        /**
         * 创富md5加密方法
         */
        public static String encode(String encodestr)
        {
          try
          {
            char[] hexDigits = { '9', '0', '1', '4', 'g', '2', 'a', '5', 'p', '6', 'l', 'u', '7', '8', '3', 'e' };
            byte[] strTemp = encodestr.getBytes();
            MessageDigest mdTemp = MessageDigest.getInstance("MD5");
            mdTemp.update(strTemp);
            byte[] md = mdTemp.digest();
            int j = md.length;
            char[] str = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
              byte byte0 = md[i];
              str[(k++)] = hexDigits[(byte0 >>> 4 & 0xF)];
              str[(k++)] = hexDigits[(byte0 & 0xF)];
            }
            return new String(str);
          }
          catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
          }
          return null;
        }
        
    	public static void main(String[] args) throws UnsupportedEncodingException
    	{
    		System.out.println(encode("yituke" + "abc"));
    		System.out.println(getMD5Str("yituke" + "abc"));
    		
    	}
    }
    

      

  • 相关阅读:
    53分(我的所有)请教:关于ClientDataSet新增记录问题(请富翁们关注!谢谢)
    DBGrid显示行号的几种方法
    现在序号加上,但怎么控制这一列不能拖动,换句话说不能获取焦点?
    Delphi
    巧妙修复delphi文件关联
    cxGrid中有没有办法操作单个cell是否只读?
    delphi cxgrid 使用方法
    Delphi XE2 的控件安装方法。
    舟山牙医 君子慎独 让你的DBGrid竖着站
    DELPHI程序的自动升级功能的实现(AUTOUPDATE使用指南)
  • 原文地址:https://www.cnblogs.com/YangshengQuan/p/8005231.html
Copyright ? 2011-2022 开发猿


http://www.vxiaotou.com