【问题标题】:Generate Guid using db information使用 db 信息生成 Guid
【发布时间】:2012-07-29 13:40:19
【问题描述】:

我正在开发 ASP.NET MVC WEB API 服务。就像我在任何地方都需要安全令牌一样。我有一个使用数据库信息生成 guid 的想法。例如,我需要从 db 中获取实体,然后在此信息中获取 id、datecreated 和 crete guid。它将是发送给客户端的令牌。所以他可以访问他的数据。

问题是我不知道如何生成它。请给我一些建议以使其发挥作用。

我发现了有趣的文章 http://www.singular.co.nz/blog/archive/2007/12/20/shortguid-a-shorter-and-url-friendly-guid-in-c-sharp.aspx 用于缩短 GUID。

任何帮助将不胜感激, 迪玛。

【问题讨论】:

  • 为什么不使用 Guid securityToken = Guid.NewGuid();
  • 您想要一个 GUID 还是某种携带您自己设计的标识符的数据?听起来您正在尝试嵌入信息,例如创建日期,放入标识中。
  • @HABO 是的,我想要某种安全的数据载体。那有可能吗?你就是写我想加入一些参数并在我的帖子中提到的 SHortGuid 中对它们进行编码
  • 为什么不能使用任何现有的身份验证/授权机制?
  • 如果客户端要从“令牌”中提取数据,那么您需要使用可逆加密。这意味着客户端有一个解密密钥。您是否已经保护连接,即使用 SSL?您真正想要完成什么?

标签: c# .net asp.net-mvc security asp.net-web-api


【解决方案1】:

我只是将AccessKey uniqueidentifier not null unique 与每个实体一起存储。你可以把它交给客户。这样你就不需要搞乱加密或散列了。

请确保为此使用Guid.NewGuid(),因为它的密码强度不高。使用这个:

public static class SecureGuidGenerator
{
    [ThreadStatic]
    static RandomNumberGenerator rng;

    public static Guid GetNext()
    {
        if (rng == null) rng = RandomNumberGenerator.Create();
        var bytes = new byte[16];
        rng.GetBytes(bytes);
        return new Guid(bytes);
    }
}

【讨论】:

  • 请注意,这不会创建 UUID - 它会创建一个稍有不同的 128 位长的随机数。 UUID 具有正式的结构。请参阅:ietf.org/rfc/rfc4122.txt - 如果您想要 UUID 中的随机数据,您需要版本 4 UUID(第 13 页的第 4 节)。
  • @LarryOsterman,你说的都是真的。出于安全原因,我不想要 UUID。我想要随机位。这是一个密码。实际上,它们与 UUID 一样独特。
  • 感谢您的回答,但这不是我想要的。我想在 guid 中嵌入 id 和 datecreation,然后生成简短的 guid。这可能吗?
  • 为什么要对这些信息进行编码?为什么我的回答方法对你不起作用?
  • 我在这里与 usr 在一起 - 在 db 中包含一个唯一的 ID 列。但是如果您必须从 id 和 datecreation 生成 GUID,RFC4122 显示了如何做到这一点 - 但是您应该注意 RFC 中提到的 MD5 算法是不安全的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 2016-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多