Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RESTAPI调用签名:用于Java、php和Ruby的comon MAC算法_Java_Security_Rest_Cryptography_Playframework 2.0 - Fatal编程技术网

RESTAPI调用签名:用于Java、php和Ruby的comon MAC算法

RESTAPI调用签名:用于Java、php和Ruby的comon MAC算法,java,security,rest,cryptography,playframework-2.0,Java,Security,Rest,Cryptography,Playframework 2.0,我想用消息身份验证代码(MAC)对REST API的调用进行签名,在Java、php、Ruby和C#中使用这种算法既简单又舒适 长话短说: 我的应用程序(PlayFramework2.0)提供了一个非常简单的RESTAPI,只有几个服务可以被有限的、已知的*组客户端访问。安全性在这里很重要,对于客户机来说也很容易使用 (*已知意味着他们必须首先注册应用程序,这是他们获得MAC机密的地方,我不知道他们是谁,他们使用什么技术。) 我想实施以下方法: 使用SSL 使用MAC对其余消息进行签名 我实

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

长话短说: 我的应用程序(PlayFramework2.0)提供了一个非常简单的RESTAPI,只有几个服务可以被有限的、已知的*组客户端访问。安全性在这里很重要,对于客户机来说也很容易使用

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

我想实施以下方法:

  • 使用SSL
  • 使用MAC对其余消息进行签名
我实现了一个测试用例,其中我将密码加密器()与PBKDF2WithHmacSHA1一起用于签名。我花了一些时间来完成签名,特别是因为我想将签名作为URL参数发送,并且必须对其进行两次编码以获得正确的格式

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


这次经历让我想到了这个问题,我想让我的客户能够轻松、舒适地使用这项服务,同时也非常安全。那么,我应该为我的签名选择什么加密算法呢?对于Java、php、Ruby、C#等最常见的web平台来说,什么是易于实现的,至少在不太常见的语言中是可以使用的。

byte[]
转换为十六进制字符串可能是签名最容易使用的格式-十六进制字符[0-9a-f]不需要特殊编码。apachecommons编解码器在
Hex
类下提供转换方法

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