2012-07-29 37 views
1

我正在开发ASP.NET MVC WEB API服务。随处可见,我需要安全令牌。我有一个想法,使用dtabase信息生成guid。对于isntance我需要从数据库采取实体,然后采取id,datecreated和crete guid使用此信息。这将是将发送给客户的令牌。所以他可以访问他的数据。使用db信息生成Guid

问题是我不知道如何生成它。请给我一些建议让它工作。

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

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

+1

为什么不使用Guid securityToken = Guid.NewGuid(); – Casperah 2012-07-29 13:53:57

+0

你想要一个GUID或某种携带你自己设计的标识符的数据吗?听起来你正在尝试嵌入信息,例如创建日期,转换为标识。 – HABO 2012-07-29 13:54:40

+0

@HABO是的,我想要一些安全的数据承载。这可能吗?你确切地写我想加入几个参数,并在我的文章中提到的SHortGuid中编码它们 – F0rc0sigan 2012-07-29 14:55:48

回答

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); 
    } 
} 
+1

请注意,这不会创建一个UUID - 它将创建一个稍微不同的128位长随机数。 UUID具有正式的结构。请参阅:http://www.ietf.org/rfc/rfc4122.txt - 如果您需要UUID中的随机数据,则需要版本4的UUID(第13页的第4节)。 – 2012-07-29 14:18:32

+0

@LarryOsterman,你说的都是真的。出于安全原因,我*不想要* UUID。我想随机比特。这是一个密码。实际上,它们与UUID一样独一无二。 – usr 2012-07-29 14:20:00

+0

感谢您的回答,但那不是我想要的。我想将id和datecreation嵌入到guid中,然后生成简短的guid。那可能吗? – F0rc0sigan 2012-07-29 14:58:04