我想过用UUID,但是实在太长了。
希望产生的字符串有以下特点:
1.长度适当,不能太长;
2.猜不到,用暴力机也难猜到;
3.确定存在数据库中这一过程具有比较好的效率;
4.唯一,具备时效性;
5.最好从某个字符串中能得出一些信息,如产生该邀请码的用户ID。
有没有好的办法,或者相关资料?
谢谢啦~
我想过用UUID,但是实在太长了。
希望产生的字符串有以下特点:
1.长度适当,不能太长;
2.猜不到,用暴力机也难猜到;
3.确定存在数据库中这一过程具有比较好的效率;
4.唯一,具备时效性;
5.最好从某个字符串中能得出一些信息,如产生该邀请码的用户ID。
有没有好的办法,或者相关资料?
谢谢啦~
5 回答3.3k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
5 回答2.5k 阅读
2 回答2.8k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
1 回答2k 阅读✓ 已解决
1和2其实在一定程度上是互斥的
3自增主键是最简单有效的
4这个和生成关系不大,在记录里保存生成时间就行了
5可以把ID明文组合到最终字符串里
楼主的这个问题我曾经仔细思考过,想要同时保证唯一性和不可猜解,最简单的思路:
1.使用一个每次生成时都不同的存在作为变量,如:时间戳,自增主键;
2.加入某些只有你知道的数据进行混淆,比如你学号的MD5值;
3.然后通过MD5,SHA1使之无法被还原,在处理后的结果中选取你要的长度作为唯一字符串;
这个思路的问题是MD5或者SHA1都可能发生碰撞,如果不进行检查的话可能出现重复。当然,可能这种碰撞造成的重复在你网站倒闭之前都不会发生。
复杂一点的思路:可以把MD5和SHA1替换成某种加密算法,如AES,DES,可以保证唯一性,代价是长度最少也会和所用加密算法的最小块一致。
总结:推荐简单思路