zoukankan      html  css  js  c++  java
  • hmacSHA1

    import javax.crypto.Mac;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.SecretKeySpec;
    
    public class HmacSHA1Encryption {
        private static final String MAC_NAME = "HmacSHA1";
        private static final String ENCODING = "UTF-8";
        /**
         * 使用 HMAC-SHA1 签名方法对对encryptText进行签名
         * @param encryptText 被签名的字符串
         * @param encryptKey 密钥
         * @return 返回被加密后的字符串
         * @throws Exception
         */
        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();
        }
    
        /**
         * 转换成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;
        }
    
        /**
         * 使用 HMAC-SHA1 签名方法对对encryptText进行签名
         * 
         * @param encryptData 被签名的字符串
         * @param encryptKey 密钥
         * @return 返回被加密后的字符串
         * @throws Exception
         */
        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();
        }
    }
    
    作者:编程之乐
    链接:http://www.jianshu.com/p/10f292f9b045
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    表示数值的字符串
    正则表达式匹配
    删除链表中重复的结点
    数值的整数次方
    [CSP-S模拟测试]:大新闻(主席树)
    [CSP-S模拟测试]:密码(AC自动机+DP)
    [CSP-S模拟测试]:壕游戏(费用流)
    [CSP-S模拟测试]:山洞(DP+快速幂)
    [CSP-S模拟测试]:阴阳(容斥+计数+递推)
    [CSP-S模拟测试]:虎(DFS+贪心)
  • 原文地址:https://www.cnblogs.com/yelongsan/p/7388027.html
Copyright © 2011-2022 走看看