1

编辑:java 相当于 php 的 hmac-SHA1
(希望,尝试 atm)

我的理解是,要创建签名,我需要一个“基本字符串”和一个“密钥”。我想我知道如何创建基本字符串,并且我假设我应该使用 Google 分配给我的应用程序的“OAuth Consumer Secret”作为密钥。

但是我应该如何处理这两个来获得签名?GAE/Java 上是否有任何 HMAC 类?

如果我只是将OAuth Playground为我生成的内容存储在某个地方,它会播放吗?是你怎么做的吗?或者 OAuth 签名是否有过期日期?

(我之前尝试过 AuthSub,但也失败了,尽管它看起来很简单。OAuth 对我来说似乎更“标准”,所以我想坚持使用 OAuth。)

4

2 回答 2

2
public String computeHmac(String baseString, String key)
    throws NoSuchAlgorithmException, InvalidKeyException, IllegalStateException, UnsupportedEncodingException
{
    Mac mac = Mac.getInstance("HmacSHA1");
    SecretKeySpec secret = new SecretKeySpec(key.getBytes(), mac.getAlgorithm());
    mac.init(secret);
    byte[] digest = mac.doFinal(baseString.getBytes());
    return Base64.encode(digest);
}
于 2010-08-14T22:42:53.517 回答
0

出于某种原因,Quercus 和 GAE 上的 hmac_init 会出错。一种解决方案是使用上述 java 方法和类,将其导入 PHP 实例并调用计算。

1) 添加 scr/phpgae 目录 id 您还没有 2) 添加 phpgae.HmacSHA256 行到 src/WEB-INF/services/com.caucho.QuercusModule 3) 将 scr/phpgae/HmacSHA256.java 添加到您的 GAE 应用程序:

package phpgae;

import java.security.InvalidKeyException;

import java.security.NoSuchAlgorithmException;

import javax.crypto.Mac;

import javax.crypto.spec.SecretKeySpec;

import com.caucho.util.Base64;

import com.caucho.quercus.module.AbstractQuercusModule;

public class HmacSHA256 extends AbstractQuercusModule {

    public String compute(String baseString, String key) throws InvalidKeyException, NoSuchAlgorithmException {
        Mac mac;
        mac = Mac.getInstance("HmacSHA256");
        SecretKeySpec secret = new SecretKeySpec(key.getBytes(), mac.getAlgorithm());
        mac.init(secret);
        byte[] digest = mac.doFinal(baseString.getBytes());
        return Base64.encode(digest);
    }
}

注意我在这里使用 SHA256。Eclipse 会即时编译所有内容,否则您需要手动编译类。

4) 在 PHP 上,你要做的是:

<?php

import phpgae.HmacSHA256;

$c = new HmacSHA256;

echo $c->compute( 'your base string' ,  'your key' );

?>

您可以从以下网址找到更多关于 Google App Engine示例的实用PHP:http: //php-apps.appspot.com/

于 2011-02-04T10:42:33.043 回答