0

我想使用消息身份验证代码 (MAC) 对对我的 REST API 的调用进行签名,哪种算法在 Java、php、Ruby 和 C# 中使用起来既方便又舒适?

更长的故事:我的应用程序(Play Framework 2.0)提供了一个非常简单的 REST API,只有几个服务可以由有限且已知的*组客户端访问。安全性在这里很重要,对客户来说也很容易使用。

(* 已知意味着他们必须先在应用程序中注册,这是他们获得 MAC 秘密的地方,我不知道他们是谁以及他们使用什么技术。)

我想实现以下方法:

  • 使用 SSL
  • 使用 MAC 对 REST 消息进行签名

我实现了一个测试用例,我使用我的密码加密器(类似于此处的示例代码)和 PBKDF2WithHmacSHA1 进行签名。我花了一些时间让签名工作,特别是因为我想将签名作为 URL 参数发送,并且必须对其进行两次编码才能以正确的格式获取它。

生成的签名是一个字节[],我使用 org.apache.commons.codec.binary.StringUtils 将其转换为 UTF-8 编码的字符串,然后使用 java.net.URLEncoder 再次对其进行编码以获得正确的 URL 参数。该解决方案有效,但感觉有点愚蠢且过于复杂。

这段经历让我想到了这个问题,我想让我的客户轻松舒适地使用该服务,而且非常安全。那么,我为我的签名选择什么加密算法?对于 Java、php、Ruby、C# 等最常见的 Web 平台来说很容易实现,并且至少可以在不太常见的语言中使用。

4

1 回答 1

1

byte[]转换为 hexString 可能是用于签名的最简单格式 - 十六进制字符 [0-9a-f] 不需要特殊编码。Apache Commons 编解码器在Hex类下提供了转换方法。

HMAC-SHA256 是 HMAC 算法的黄金标准,应该存在于任何值得使用的平台上。

于 2013-01-15T15:38:42.150 回答