Java常用数据加密算法

Java的数据加密算法,HmacSHA1,MD5等。java自带了加密的方法类SecretKey。

private static final String MAC_name="HmacSHA1"; 
    private static final String ENCODING="UTF-8";
/**
    *使用HMAC-SHA1签名方法对对encryptText进行签名
    *@paramencryptText被签名的字符串
    *@paramencryptKey密钥
    *@return返回被加密后的字符串
    *@throwsException
    */
    public static String HmacSHA1Encrypt(String encryptText, String encryptKey)throws Exception{
        byte[] data = encryptKey.getBytes( ENCODING );
        // 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
        SecretKey secretKey = new SecretKeySpec( data, MAC_NAME );
        // 生成一个指定 Mac 算法 的 Mac 对象
        Mac mac = Mac.getInstance( MAC_NAME );
        // 用给定密钥初始化 Mac 对象
        mac.init( secretKey );
        byte[] text = encryptText.getBytes( ENCODING );
        // 完成 Mac 操作
        byte[] digest = mac.doFinal( text );
        StringBuilder sBuilder = bytesToHexString( digest );
        return sBuilder.toString();
    }
/**
    * 使用 HMAC-SHA1 签名方法对对e
    * @param encryptData 被签名的字
    * @param encryptKey 密钥
    * @return 返回被加密后的字符串
    */
    public static String hmacSHA1Encrypt( byte[] encryptData, String encryptKey ) throws Exception{
        byte[] data = encryptKey.getBytes( ENCODING );
        // 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
        SecretKey secretKey = new SecretKeySpec( data, MAC_NAME );
        // 生成一个指定 Mac 算法 的 Mac 对象
        Mac mac = Mac.getInstance( MAC_NAME );
        // 用给定密钥初始化 Mac 对象
        mac.init( secretKey );
        // 完成 Mac 操作
        byte[] digest = mac.doFinal( encryptData );
        StringBuilder sBuilder = bytesToHexString( digest );
        return sBuilder.toString();
    }
    /**
    * 转换成Hex
    * @param bytesArray
    */
    public static StringBuilder bytesToHexString( byte[] bytesArray ){
        if ( bytesArray == null ){
            return null;
        }
        StringBuilder sBuilder = new StringBuilder();
        for ( byte b : bytesArray ){
            String hv = String.format("%02x", b);
            sBuilder.append( hv );
        }
        return sBuilder;
    }
public static String md5(String str) {
        StringBuilder sb = new StringBuilder();
        try {
            MessageDigest m = MessageDigest.getInstance("MD5");
            m.update(str.getBytes("UTF8"));
            byte bytes[] = m.digest();

            for (int i = 0; i < bytes.length; i++) {
                if ((bytes[i] & 0xff) < 0x10) {
                    sb.append("0");
                }
                sb.append(Long.toString(bytes[i] & 0xff, 16));
            }
        } catch (Exception e) {
        }
        return sb.toString();
    }
   
    public static String createSign(Map<String,String> params,String appkey) throws Exception {
        String queryString = getString(params);
        return HmacSHA1Encrypt(queryString,appkey);
    }
    //
    private static String getString(Map<String, String> params) {
        List<String> sList = new ArrayList<String>();
        for(Entry<String,String> entry:params.entrySet()){
            sList.add(entry.getKey()+"="+entry.getValue());
        }
        String queryString = Joiner.on("&").join(sList);
        return queryString;
    }
/**
    * HmacMD5算法
    * @param msg 加密信息
    * @param keyString 秘钥
    * @return digest 结果
    */
    public static String hmacMD5(String msg, String keyString) {
        String digest = null;
        try {
            SecretKeySpec key = new SecretKeySpec((keyString).getBytes("UTF-8"), "HmacMD5");
            Mac mac = Mac.getInstance("HmacMD5");
            mac.init(key);

            byte[] bytes = mac.doFinal(msg.getBytes("UTF-8"));

            StringBuffer hash = new StringBuffer();
            for (int i = 0; i < bytes.length; i++) {
                String hex = Integer.toHexString(0xFF & bytes[i]);
                if (hex.length() == 1) {
                    hash.append('0');
                }
                hash.append(hex);
            }
            digest = hash.toString();
        } catch (UnsupportedEncodingException | NoSuchAlgorithmException | InvalidKeyException e) {
        }
        return digest;
    }

相关推荐