Ruby on rails rails-创建安全的ID/密码

Ruby on rails rails-创建安全的ID/密码,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我正在寻找一种铁路方式来创建一个非常安全的UID,作为身份验证令牌 我一直在使用UUID,但被告知它们不安全。我想了解一下,现在在ruby/rails 3中选择的方法是什么?这个问题并不是rails特有的 UUID是不安全的,因为它是一个唯一的标识符,并且它包含给定机器的“常量”部分(例如,它可能使用机器的MAC地址),这使得猜测更容易 如果您想要100k+个字符串而没有人猜到,那么您需要能够在较大的密钥空间中分发密钥。让我解释一下: 如果您只需要一个键(让我们来),您可以选择“A”。在a-Z键

我正在寻找一种铁路方式来创建一个非常安全的UID,作为身份验证令牌


我一直在使用UUID,但被告知它们不安全。我想了解一下,现在在ruby/rails 3中选择的方法是什么?

这个问题并不是rails特有的

UUID是不安全的,因为它是一个唯一的标识符,并且它包含给定机器的“常量”部分(例如,它可能使用机器的MAC地址),这使得猜测更容易

如果您想要100k+个字符串而没有人猜到,那么您需要能够在较大的密钥空间中分发密钥。让我解释一下:

如果您只需要一个键(让我们来),您可以选择“A”。在a-Z键空间中,你有1:26的机会猜到它。现在,如果您将密钥空间扩展到A-Za-z,您有1:52的猜测机会

还需要更多的安全措施吗?使用较长的键:“AA”1:2704

现在,如果您想要有2000个键,并且使用2的键长度(例如“AA”),那么有人可能会猜到它。很糟糕

所以,这里的关键是选择一个非常长的键大小。使用
Digest::SHA1
可以获得40个字符的键(使用十六进制,每个字符有16个不同的值)。这是
1.46150164e48
唯一值。您的100k值应该足够随机

编辑:


对于40位十六进制SHA1值,您有机会猜到一个。这需要很长时间。

防范什么?碰撞?这应该取决于您生成它们的方式以及您计划使用的数量。我计划使用很多,100000个,以防有人能够轻松猜测或找到ID。可以将其视为密码。建议?uuid是无法猜测的,除非你想花上万亿年的时间去猜测。我建议使用类似designe()的东西进行身份验证。它不是用于身份验证的。这是另外一个例子,非常有趣!如何在rails中使用Digest::SHA1?为了补充这个问题,这个十六进制SHA1算法可以用作身份验证令牌,我可以分发给希望通过API连接到我的应用程序的用户吗?这是谷歌、推特、facebook等其他巨头用来生成API密钥的工具吗?如果是,那么我将如何在Rails中实现这一点?有没有关于这个的特定类或库?谢谢在rails中,我可以使用“Digest::SHA1.hexdigest(“test”)”生成其中一个键。您使用什么来解除加密?另外,如果我需要一些随机的东西,您通常使用什么来进行变量“test”?SHA1密钥可以安全地作为API密钥分发。如果您使用
摘要::SHA1.hexdigest('test')
,您将得到相同的密钥。通常,您会获取一些用户数据(id、电子邮件等)和一些随机值(名为“salt”),将它们转换成一个字符串,然后将其删除。无法解码字符串,请将其存储在数据库中。再次对id、电子邮件、salt等重新编码,您可以比较SHA1值。