代码之家  ›  专栏  ›  技术社区  ›  Jaroslav Záruba

如何在GAE/J上创建OAuth HMAC-SHA1签名?

  •  1
  • Jaroslav Záruba  · 技术社区  · 14 年前

    编辑: java equivalent to php's hmac-SHA1
    (好吧,希望能在上午试一下。)

    但是我该怎么处理这两个人才能得到签名呢?GAE/Java上有HMAC类吗?

    如果我把它放在什么地方会播放吗 OAuth Playground 为我做什么?你是这样做的吗?或者OAuth签名有过期日期吗?

    (我以前试过,但是 failed too ,尽管看起来很简单。另外,OAuth对我来说更像是“标准的”,所以我想继续使用OAuth。)

    2 回复  |  直到 7 年前
        1
  •  2
  •   Jaroslav Záruba    14 年前
    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);
    }
    
        2
  •  0
  •   MarkokraM    14 年前

    由于某些原因,Quercus和GAE上的hmac\u init会给出错误。一种解决方案是使用上述java方法和类,将其导入PHP实例并调用compute。

    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可以动态编译所有内容,否则需要手动编译类。

    <?php
    
    import phpgae.HmacSHA256;
    
    $c = new HmacSHA256;
    
    echo $c->compute( 'your base string' ,  'your key' );
    
    ?>
    

    你可以找到更实用的 PHP on Google App Engine 示例来自: http://php-apps.appspot.com/