有什么依据说它是可逆的呢?这个格式看起来像是CSDN使用的吧,它帖子静态化后的文件名也是这样的:
http://topic.csdn.net/u/20090112/21/d7cae149-db55-41e3-bb5e-31e1f920208d.html?seed=777650522
我估计它是不可逆的,只是把这个字符串作为某个表的主键了。
http://topic.csdn.net/u/20090112/21/d7cae149-db55-41e3-bb5e-31e1f920208d.html?seed=777650522
我估计它是不可逆的,只是把这个字符串作为某个表的主键了。
我只是在近来的项目中,接触到一些比较大型的软件公司都喜欢用这种方式对ID进行加密,防止客户端修改ID来提交查询(虽然不是很保险,但是比明文要好)
如果是不可逆的,那数据表中岂不是还得加一列?感觉太麻烦。
不一定非得是这串字符,通用的解决方案一般都是怎样的?
GUID 的使用目的不是在于防止客户修改ID来提交查询,也不是为什么加密,GUID可以为数据对象提供一个时空内全球唯一的标识符。
不须多加一列,因为GUID的唯一性,可以直接作主键使用。
GUID 本来就是微软平台上通用的解决方案,打开你windows的注册表仔细看看。
个人觉得是md5可能性大点,毕竟可以保证唯一性,又不用自己写加密算法。。解密就不用吧?,,不知是不是数据库里增加多一列来放这个id号的,牺牲点空间应该是值得的要加密可以类似这样的php代码,随便写个,仅作参考..
//生成6位的随机数,增加干扰性,防止可能的md5解密
$addStr = RandStr(6);//格式化数据
$contentid = $encodeid($timestamp.$addStr);
echo $contentid; /**
* @abstract 产生令人无语的8-4-4-4-8组合的随机id号
* @param string $code
*
*/
function encodeid( $code ) {
$contentid = md5($code);
return substr($contentid, 0, 8).'-'.substr($contentid, 9, 4).'-'.substr($contentid, 13, 4).'-'.substr($contentid, 17, 4).'-'.substr($contentid, 23, 8);
}
/**
* @abstract 产生指定长度随机字符串
* @param int $len
* 具体可修改 $str
*/
function RandStr($len){
$code = '';
$str = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
//$l = strlen($str);
$l = 62;
for($i = 1;$i <= $len;$i++){
$num = rand(0, $l-1);
$code .= $str[$num];
}
return $code;
}
结果类似于 9c25284f-8bfe-d32d-a091-5e7c39e6//生成6位的随机数,增加干扰性,防止可能的md5解密
$addStr = RandStr(6);
//格式化数据
$contentid = encodeid($timestamp.$addStr);
echo $contentid; /**
* @abstract 产生令人无语的8-4-4-4-8组合的随机id号
* @param string $code
*
*/
function encodeid( $code ) {
$contentid = md5($code);
return substr($contentid, 0, 8).'-'.substr($contentid, 9, 4).'-'.substr($contentid, 13, 4).'-'.substr($contentid, 17, 4).'-'.substr($contentid, 23, 8);
}
/**
* @abstract 产生指定长度随机字符串
* @param int $len
* 具体可修改 $str
*/
function RandStr($len){
$code = '';
$str = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
//$l = strlen($str);
$l = 62;
for($i = 1;$i <= $len;$i++){
$num = rand(0, $l-1);
$code .= $str[$num];
}
return $code;
}
其中数据库中的ID被搞成了这个样子
408261db-10de3cb76db-2fd9c9111c3a9eaf090fb41dea67c038这个是否是一种通用的类似MD5的算法?
老了,,,一直写错......个人觉得生成怎样的id号不用太在意,有点疑问的是这些都是4的倍数的组合,不知是不是都和md5挂钩的缘故..
将id号转换下,能习惯就好~
很多时候都是靠表里那一列储时间的来读出指定数据...
SELECT NEWID()
或者打开 Mysql,输入查询语句
SELECT UUID()楼主开始写的东西就出来了,生成的这个串不单单是取一个随机数然后加密,这样并不能保持本地上的唯一性,更别说是全球唯一了。想多了解的去MSDN查一下GUID的文档。