公共和私有API密钥

公共和私有API密钥,api,hash,hmac,api-key,Api,Hash,Hmac,Api Key,我正在开发一个需要这种身份验证的API系统。用户将发送一个带有id、数据和散列(用私钥散列的数据)的HTTP请求,然后在服务器中检查散列是否与此处的相同进程匹配。 实施是否必须如此? 我将使用客户机的id作为公钥,但生成randon号码的id的sha256私钥的最佳方法是什么?这不是私钥/公钥加密。在这样的系统中,客户机将加密整个数据,然后您将使用私钥对其解密。您永远不会将私钥提供给客户端 您所做的是请求签名。你给出一个“秘密”(你称之为“私钥”),然后他们用这个来生成散列。然后,您可以检查服务

我正在开发一个需要这种身份验证的API系统。用户将发送一个带有id、数据和散列(用私钥散列的数据)的HTTP请求,然后在服务器中检查散列是否与此处的相同进程匹配。
实施是否必须如此?

我将使用客户机的id作为公钥,但生成randon号码的id的sha256私钥的最佳方法是什么?

这不是私钥/公钥加密。在这样的系统中,客户机将加密整个数据,然后您将使用私钥对其解密。您永远不会将私钥提供给客户端

您所做的是请求签名。你给出一个“秘密”(你称之为“私钥”),然后他们用这个来生成散列。然后,您可以检查服务器上的哈希,因为您也知道这个秘密


在这种系统中不会有公钥。您通常使用会话密钥或令牌标识客户机,因此客户机需要首先进行身份验证(这意味着您需要某种身份验证方法)。本质上,您试图实现的是OAuth。也许可以看看这个库,看看是否可以直接使用它-

这不是私钥/公钥加密。在这样的系统中,客户机将加密整个数据,然后您将使用私钥对其解密。您永远不会将私钥提供给客户端

您所做的是请求签名。你给出一个“秘密”(你称之为“私钥”),然后他们用这个来生成散列。然后,您可以检查服务器上的哈希,因为您也知道这个秘密

在这种系统中不会有公钥。您通常使用会话密钥或令牌标识客户机,因此客户机需要首先进行身份验证(这意味着您需要某种身份验证方法)。本质上,您试图实现的是OAuth。也许您可以查看一下库,看看是否可以直接使用它-

查看身份验证的功能可能是一个好的开始

基本上,他们正在做与您建议的相同的事情,并且他们使用RFC2104HMAC-SHA1进行散列。实现取决于您对语言的选择。

检查身份验证的操作可能是一个好的开始


基本上,他们正在做与您建议的相同的事情,并且他们使用RFC2104HMAC-SHA1进行散列。实现取决于您选择的语言。

哪种方法是生成prvate密钥的最佳方法?Thanks@Mario看看这个生成随机数据的例子,我有一个疑问:如果我用随机数据生成私钥,我必须将它发送到客户端(一个Android应用程序),以便嗅探器能够发现密钥。从邮件或双方的其他东西生成它怎么样?这样更好吗?@Mario如果您担心中间人攻击,您应该使用https,或者通过电子邮件发送密钥,这是生成prvate密钥的最佳方法?Thanks@Mario看看这个生成随机数据的例子,我有一个疑问:如果我用随机数据生成私钥,我必须将它发送到客户端(一个Android应用程序),以便嗅探器能够发现密钥。从邮件或双方的其他东西生成它怎么样?更好吗?@Mario如果你担心中间人攻击,你应该使用https,或者通过电子邮件发送密钥