当前位置: 首页 > 编程语言 > C#

Guid.NewGuid()VSRandomStringGeneratorfromRandom.Next()分享

时间:2023-04-11 11:59:18 C#

Guid.NewGuid()VSRandomStringGeneratorfromRandom.Next()我和同事正在讨论使用哪些方法自动生成用户ID和帖子ID以在数据库中进行识别:一个选项使用Random的单个实例,并采用一些有用的参数,因此它可以重复用于各种字符串生成情况(即从4位数字到20位数字)alphanumericid).这是代码://这在服务器实例的生命周期内创建一次publicconststringALPHA_CAPS="ABCDEFGHIJKLMNOPQRSTUVWXYZ";publicconststringNUMERIC="1234567890";随机数=newRandom();publicstringGetRandomString(intlength,paramschar[]chars){strings="";for(inti=0;i多线程访问可能会破坏其状态。在此之后,输出将比现在更差。它使用可预测的31位种子。这有两个后果:这意味着您不能依赖Random的输出是唯一的,无论多长时间。即使您不需要安全性,我也建议您使用CSPRNG(RNGCryptoServiceProvider)。它的性能对于大多数用途来说还是可以接受的,而且我相信它的随机数质量比Random更好。如果你想要唯一性,我建议你得到128位左右的数字。要使用RNGCryptoServiceProvider生成随机字符串,您可以查看我对如何在C#中生成随机的8个字符、字母数字字符串?.Guid.NewGuid()返回的GUID现在是版本4GUID。它们是从PRNG生成的,因此它们具有非常相似的属性,生成随机的122位数字(其余6位是固定的)。它的熵源比Random使用的熵源质量高得多,但不能保证密码安全。但是生成算法可以随时改变,所以你不能依赖它。例如,过去WindowsGUID生成算法从v1(基于MAC+时间戳)更改为v4(随机)。使用System.Guid:...可用于所有需要唯一标识符的计算机和网络。请注意,Random是一个伪随机数生成器。它不是真正随机的,也不是唯一的。与128位GUID相比,它只能使用32位值。然而,即使是GUID也可能会发生冲突(尽管这种可能性很小),因此您应该使用数据库自??身的功能来为您提供唯一的标识符(例如自动递增ID列)。此外,您无法轻松地将GUID转换为4位或20位(字母)数字。与某些人在评论中所说的相反,Guid.NewGuid()生成的GUID不依赖于任何特定于机器的标识符(仅类型1GUID,Guid.NewGuid()返回类型4GUID,它们大多是随机的)。只要您不需要密码安全性,Random类就足够了,但如果您想要更高的安全性,请使用System.Security.Cryptography.RandomNumberGenerator。对于Guid方法,请注意GUID中的数字都不是随机的。引自维基百科:在规范表示中,xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx,N的最高有效位代表变体(取决于变体;使用一位、两位或三位)。UUID规范涵盖的变体由N的两个最高有效位表示为10(即十六进制N始终为8、9、A或B)。在UUID规范涵盖的变体中,有五个版本。对于此变体,M的四位数字代表UUID版本(即hexM将是1、2、3、4或5)。关于您的编辑,这是优先使用GUID而不是生成的字符串的原因之一:SQLServer中GUID(唯一标识符)的本机存储是16个字节。要存储varchar(字符串)的等效长度,其中id中的每个“数字”都存储为一个字符,需要在32到38个字节之间,具体取决于格式。由于其存储,SQLServer还能够比varchar列更有效地索引uniqueidentifier列。以上就是C#学习教程Guid.NewGuid()VSRandomStringGeneratorfromRandom.Next()分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢