java和php的hmac_sha1结果不同,求高手帮忙

最近遇到hmac_sha1跨语言加密的问题,只提供给了java加密文件,没提供php的,我用php hmac_sha1内置函数,得到的sig加密结果不同,欢迎高手帮忙提供相对应的php代码,提供的java类如下

欢迎加QQ: 847036019

public abstract class Coder {  
    public static final String KEY_SHA = "SHA";  
    public static final String KEY_MD5 = "MD5";  
    public static final char hexDigits[] = { ‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘,
            ‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘ };
    public static final String KEY_MAC = "HmacSHA1"; 
    public static byte[] decryptBASE64(String key) throws Exception {  
        return (new BASE64Decoder()).decodeBuffer(key);  
    }   
    /**
     * 初始化HMAC密钥
     */  
    public static String initMacKey() throws Exception {  
        KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC);  
 
        SecretKey secretKey = keyGenerator.generateKey();  
        return encryptBASE64(secretKey.getEncoded());  
    }  
      
        /**
         * HMAC加密
         */  
        public static byte[] encryptHMAC(byte[] data, String key) throws Exception {  
      
            SecretKey secretKey = new SecretKeySpec(decryptBASE64(key), KEY_MAC);  
            Mac mac = Mac.getInstance(secretKey.getAlgorithm());  
            mac.init(secretKey);  
      
            return mac.doFinal(data);  
      
        }  
        public static void main(String[] args) {
                 try {
                   String param = ‘‘;

String appkey = ‘‘;

byte[] bytes = Coder.encryptHMAC((param).getBytes("utf-8"), appkey);
                   String sig = new BigInteger(bytes).toString();
                   System.out.println("sig:" + sig);

} catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        }
    }
php我用相对应的加密即php自带函数

$sig = hash_hmac("sha1", $str, $key) php得出的sig结果总是和java不一样,求高手帮忙写一个与java加密值sig相同的代码

时间: 2024-11-07 00:54:09

java和php的hmac_sha1结果不同,求高手帮忙的相关文章

一个简单通用权限管理系统,求各位帮忙看看

最近为公司做一个能源行业的管理平台系统,既然系统定位为平台,自然需要插件化.高通用性等,当前正在进行权限部分的设计,由于本人最近一直忙于开发.设计工作,手中没有一个比较通用的权限管理系统,所以打算顺便借此机会设计一套,我对权限系统没有什么研究,看了一天园子里的相关文章,初步做了个数据库设计,希望各路大神帮忙看看,下面附上数据表结构图,献丑了... 一个简单通用权限管理系统,求各位帮忙看看,布布扣,bubuko.com

Java编程:用两种方法求输入正整数的位数。

import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); //把整数n转换为字符串求其长度 int len = Integer.toString(n).length(); System.out.println("用字符串的方式求其长度len="+len);

java学习日记-基础-随机数组的求余运算

时间是2017年5月6日,青年节刚过,坐标上海,沪漂2个月. 就这样简短地开始吧.                                by:slowcity [案例分析1] 要求定义一个int 型数组a,包含100 个元素,保存100个随机的4 位数.再定义一个int 型数组b,包含10 个元素.统计a 数组中的元素对10 求余等于0 的个数,保存到 b[0]中:对10 求余等于1 的个数,保存到b[1]中,--依此类推 一般看到这类的最基本的思路:1先建立一个含数组存随机四位数 2

java 根据二叉树前序 ,中序求后续

在一棵二叉树总,前序遍历结果为:ABDGCEFH,中序遍历结果为:DGBAECHF,求后序遍历结果. 我们知道: 前序遍历方式为:根节点->左子树->右子树 中序遍历方式为:左子树->根节点->右子树 后序遍历方式为:左子树->右子树->根节点 从这里可以看出,前序遍历的第一个值就是根节点,然后再中序遍历中找到这个值,那么这个值的左边部分即为当前二叉树的左子树部分前序遍历结果,这个值的右边部分即为当前二叉树的右子树部分前序遍历结果.因此,通过这个分析,可以恢复这棵二叉树

java基础实例用if和for求输入的数是否为质数

import java.util.*; public static void main(String[] args){ Scanner sc=new Scanner(System.in); System.out.println("请输入一个大于0的整数M");//质数是余数是1和它本身的正整数 int m=sc.nextInt(); if (m==2||m==1){System.out.println("你输入的是一个质数");}//排除1和2 这是特殊数字 els

java HashMap中出现重复的key, 求解释

上代码: Person p1 = new Person("xiaoer",1); Person p2 = new Person("san",4); Map<Person,String> maps = new HashMap<Person,String>(); maps.put(p1, "1111"); maps.put(p2, "2222"); System.out.println(maps); map

Java小例子——穷举质数,求平方和,求质因子。

求平方和 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 public static void main(String[] args) throws IOException     {         int n;         String s;         BufferedReader buf;         buf=new BufferedReader(new In

java最小堆实现优先权队列和求最大的n个数问题

堆在实现优先权队列和求最大最小的n个数问题上,有着莫大的优势! 对于最大堆和最小堆的定义此处不再赘述,课参考网上文章:http://blog.csdn.net/genios/article/details/8157031 本文主要是对最小堆进行实现和应用,仅供新手参考. 优先权队列 优先权队列是一种非常有用的数据结构,操作系统的进程调度就有优先权队列的应用,如果用最小值表示最高的优先权,则使用最小堆,否则使用最大堆. top-N值为问题: 对于求最大的n个数,可以用最小堆来实现,思路是:将n个数

Java Web基础(三)(HttpServletRequest-请求基础)

之前已经详细讲解了Servlet/JSP的基础知识,包括Servlet和JSP的关系.Servlet基本的编写和配置,以及一个请求/响应过程中,HTTP服务器.web容器.Servlet是如何配合工作的. 对于一个web应用程序来说,请求/响应是其工作工程的基础,我们这里只考虑基于HTTP协议的请求/响应模型,HttpServletRequest代表请求及相关参数,HttpServletResponse代表响应及相关参数,这两个对象会随着一个请求的发起而建立,随着一个响应的结束而销毁被回收.当一