-->

使用CRC较短的GUID(Shorter GUID using CRC)

2019-07-30 20:22发布

我想提出在ASP.NET网站,并希望能够拥有它可以通过与最终用户ID的URL来访问用户配置文件。 唯一标识符显然是一个不错的选择,因为它是长和(纠正我,如果我错了)不是真的URL友好。

我在想,如果我公司生产的ASP页面上的独特idnetifier然后用CRC(或类似的东西)只是一个GUID,如果它仍然是独特(甚至是唯一的话)散列它。

例如:

该GUID 6f1a7841-190b-4c7a-9f23-98709b6f8848等于CRC E6DC2D44。

谢谢

Answer 1:

一个GUID的CRC将不是唯一的,没有。 这将是一些真棒压缩算法,否则,要能够把一切都变成只有4个字节。

另外,如果您的用户存储在一个GUID密钥的数据库,你就会有麻烦发现了这种特定的CRC相匹配的用户。

你会更好用普通的旧整数唯一标识一个用户。 如果你想拥有的网址难以猜测的,你可以用第二张票(或令牌)这是随机生成的参数结合起来。 它不必是唯一的,因为你用整数ID识别用户。 你可以认为它或多或少作为密码。



Answer 2:

任何计算出的散列包含比原始数据更少的信息(位),也决不能作为唯一的。 总有一些冲突。



Answer 3:

如果用户拥有一个用户名,那么为什么不利用呢? 它应该是唯一的(我希望!),并很可能是短暂和URL友好。 这也将是便于用户记忆,也和在与ASP.NET会员方案适合(因为用户名在籍提供商“主键”)。 我没有看到任何安全问题,因为(大概)只有通过认证的用户才能够访问它,反正?



Answer 4:

不,它不会作为唯一的,因为你从它丢失信息。 如果你把32个字符的十六进制字符串,并将其转换为8个字符的十六进制字符串,然后,根据定义,你失去的数据的75%。

你可以做的是使用更多的文字来表示数据。 一个GUID使用ONY 16个字符(16进制),从而可以使用更高的碱(例如基座64),它可以让你编码在更少的字符的相同的信息量。



Answer 5:

我看不出在HTTP URL正常GUID任何问题。 如果你想的Guid的短路形式使用下方。

var gid = Guid.NewGuid().ToString("N");

这将给没有任何连字符或特殊字符的GUID。



Answer 6:

GUID是全球唯一的,这意味着你不会遇到冲突,希望永远。 这些通常是基于某种基于时间计算的随机性插话。 如果你想使用哈希,如CRC缩短东西,然后再独特性就不是自动的,但只要你管理你自己的独特性(检查是否散列当前未分配给其他用户,如果是,再生直到你会得到一个唯一的一个),那么你可以使用几乎所有的东西。

这是正路很多网址缩短服务工作。



Answer 7:

如果使用UUID的CRC / GUID作为ID你也可以在第一时间使用较短的ID。

一个UUID / GUID作为ID的想法是IMO可以创建断开连接的系统ID和应该有重复的ID没有问题。

反正谁去用手反正输入网址的个人资料页?

此外,我看到一个UUID / GUID的URL友好没有问题 - 有没有未HTTP所允许字符。



Answer 8:

如何数据库中的用户(或您用来存储数据的任何其他地方)确定了吗?

如果他们利用这种GUID标识的我会说,你有一个很好的理由,因为这使得寻找一个特殊的ID很复杂(使用二叉树即使); 有来存储这些值也需要更多的空间。

如果他们是由一个唯一的整数值确定的,为什么不利用这个调用用户资料?



Answer 9:

您可以缩短一个GUID到20个可打印的ASCII字符,它仍然是唯一的,也不会丢失任何信息。

看看杰夫·阿特伍德这篇博客文章:
我们的装备护甲ASCII



文章来源: Shorter GUID using CRC
标签: asp.net guid crc