Encryption 创建加密API密钥的最佳方法

Encryption 创建加密API密钥的最佳方法,encryption,cryptography,openssl,md5,cryptoapi,Encryption,Cryptography,Openssl,Md5,Cryptoapi,我的应用程序中有一个开放API,我想为它提供访问密钥。传入的信息将是用户id、资源id和要更新的值。我希望每个资源有一个API密钥 我希望能够只使用提供的数据验证传入请求的真实性,而不检查任何类型的数据库(非常简单,非常快速!) 如果我使用md5从资源ID、用户ID和salt生成API密钥,它可能看起来像这样 authentic_request = md5(user_id + resource_id + salt) == api_key 我的问题是我应该有多偏执。像上面这样的东西加上普通的旧m

我的应用程序中有一个开放API,我想为它提供访问密钥。传入的信息将是用户id、资源id和要更新的值。我希望每个资源有一个API密钥

我希望能够只使用提供的数据验证传入请求的真实性,而不检查任何类型的数据库(非常简单,非常快速!)

如果我使用md5从资源ID、用户ID和salt生成API密钥,它可能看起来像这样

authentic_request = md5(user_id + resource_id + salt) == api_key
我的问题是我应该有多偏执。像上面这样的东西加上普通的旧md5就足够了吗?另一种选择是使用openssl针对pem生成密钥,然后可能使用md5生成结果以保持其简洁,这听起来是否过于偏执,或者实际上是否增加了一层安全性

非常感谢您的任何意见或建议


谢谢

这实际上是一个简单的

假设您将根据
(用户id、资源id)
对发出这些密钥,并将您调用的
salt
值保密,并且您不希望有严重的攻击企图,那么这应该是可行的。然而,最佳实践表明,您应该使用一种比仅仅串联更安全的算法来组合密钥和数据,以及一种更强的摘要算法,如SHA-1;有一个标准的HMAC-SHA1组合算法可以很好地解决这个问题


第三个值实际上是键,而不是盐;拥有此密钥可以生成和验证身份验证代码。

这取决于您试图保护的内容。就其本身而言,这将防止随意滥用API,但不会防止重播攻击。如果有人正在嗅探您的流量,那么他们将看到密钥,并能够通过重用它来访问资源。向解决方案中添加SSL可以防止此类攻击


您可以将MD5更改为SHA-256。

谢谢,这正是我想要的。我知道这一定有一个已知的技术,只是很难表达搜索词!谢谢,我知道密钥不能提供这种级别的安全性,因为它可能被拦截和误用。只是为了寻找一种安全的身份验证机制,我们将研究用于通信的SSL。