首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >相当于php的hmac-SHA1的java

相当于php的hmac-SHA1的java
EN

Stack Overflow用户
提问于 2009-10-23 04:56:58
回答 7查看 42.4K关注 0票数 51

我正在寻找一个与此php调用等效的java:

代码语言:javascript
复制
hash_hmac('sha1', "test", "secret")

我尝试了一下,使用了java.crypto.Mac,但这两种方法并不一致:

代码语言:javascript
复制
String mykey = "secret";
String test = "test";
try {
    Mac mac = Mac.getInstance("HmacSHA1");
    SecretKeySpec secret = new SecretKeySpec(mykey.getBytes(),"HmacSHA1");
    mac.init(secret);
    byte[] digest = mac.doFinal(test.getBytes());
    String enc = new String(digest);
    System.out.println(enc);  
} catch (Exception e) {
    System.out.println(e.getMessage());
}

key = "secret“和test = "test”的输出似乎不匹配。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-10-23 06:28:16

事实上,他们确实是同意的。

正如Hans Doggen已经提到的,PHP使用十六进制表示法输出消息摘要,除非您将原始输出参数设置为true。

如果您想在Java中使用相同的表示法,您可以使用类似于

代码语言:javascript
复制
for (byte b : digest) {
    System.out.format("%02x", b);
}
System.out.println();

以相应地格式化输出。

票数 41
EN

Stack Overflow用户

发布于 2011-05-25 20:04:27

您可以在Java中尝试:

代码语言:javascript
复制
private static String computeSignature(String baseString, String keyString) throws GeneralSecurityException, UnsupportedEncodingException {

    SecretKey secretKey = null;

    byte[] keyBytes = keyString.getBytes();
    secretKey = new SecretKeySpec(keyBytes, "HmacSHA1");

    Mac mac = Mac.getInstance("HmacSHA1");

    mac.init(secretKey);

    byte[] text = baseString.getBytes();

    return new String(Base64.encodeBase64(mac.doFinal(text))).trim();
}
票数 20
EN

Stack Overflow用户

发布于 2011-05-12 02:40:22

这是我的实现:

代码语言:javascript
复制
        String hmac = "";

    Mac mac = Mac.getInstance("HmacSHA1");
    SecretKeySpec secret = new SecretKeySpec(llave.getBytes(), "HmacSHA1");
    mac.init(secret);
    byte[] digest = mac.doFinal(cadena.getBytes());
    BigInteger hash = new BigInteger(1, digest);
    hmac = hash.toString(16);

    if (hmac.length() % 2 != 0) {
        hmac = "0" + hmac;
    }

    return hmac;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1609899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档