有什么依据说它是可逆的呢?这个格式看起来像是CSDN使用的吧,它帖子静态化后的文件名也是这样的:
http://topic.csdn.net/u/20090112/21/d7cae149-db55-41e3-bb5e-31e1f920208d.html?seed=777650522
我估计它是不可逆的,只是把这个字符串作为某个表的主键了。

解决方案 »

  1.   

    这个好像是那个CSDN的贴子,还有看起来是不可逆的,楼主说说这个是干什么用的吧。
      

  2.   

    漏了说了,那个应该是个随机数或是一个唯一字符串,在PHP是:rand或mt_rand函数唯一字符串:uniqid函数
      

  3.   

    这不是密文,只是一个GUID。至于算法上是否可逆,有兴趣可以查查资料。GUID生成与硬件数据,时间有关,世界上任意两台不同的计算机不可能生成同一个GUID,即使算法可逆,被你拿到也算不出什么东西来。
      

  4.   

    恩,感谢大家的回答
    我只是在近来的项目中,接触到一些比较大型的软件公司都喜欢用这种方式对ID进行加密,防止客户端修改ID来提交查询(虽然不是很保险,但是比明文要好)
    如果是不可逆的,那数据表中岂不是还得加一列?感觉太麻烦。
    不一定非得是这串字符,通用的解决方案一般都是怎样的?
      

  5.   


    GUID 的使用目的不是在于防止客户修改ID来提交查询,也不是为什么加密,GUID可以为数据对象提供一个时空内全球唯一的标识符。
    不须多加一列,因为GUID的唯一性,可以直接作主键使用。
    GUID 本来就是微软平台上通用的解决方案,打开你windows的注册表仔细看看。
      

  6.   

    看起来应该是一个md5值,32位,而且映射到数字和字母集合上。md5是用来对一段内容进行摘要的算法,也就是从概率论上讲,不同的内容可以得到一个不会被重复的md5值,具有唯一性。但如果是md5值的话,肯定是不可逆的。
      

  7.   

    这个要么md5加密后转换,要么是故意生成32个数字与字母来迷惑的..
    个人觉得是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;
    }
      

  8.   

    这个才对,上面 encodeid 处多了$号,
    结果类似于 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;
    }
      

  9.   

    我找到中软公司开发的一个系统
    其中数据库中的ID被搞成了这个样子
    408261db-10de3cb76db-2fd9c9111c3a9eaf090fb41dea67c038这个是否是一种通用的类似MD5的算法?
      

  10.   


    老了,,,一直写错......个人觉得生成怎样的id号不用太在意,有点疑问的是这些都是4的倍数的组合,不知是不是都和md5挂钩的缘故..
    将id号转换下,能习惯就好~
    很多时候都是靠表里那一列储时间的来读出指定数据...
      

  11.   

    楼上写程序的那位费心了,楼主也别为这种东西费心了,以后见到这样的东西符合 8-4-4-4-12(位字符,也有可能不含连接符)作为数据库主键的,很有可能就是GUID格式。至于其他格式(上面提到那串408261db-10de3cb76db-2fd9c9111c3a9eaf090fb41dea67c038)的就去问开发的人。你打开Mssql,在查询分析器里面打上
    SELECT NEWID()
    或者打开 Mysql,输入查询语句
    SELECT UUID()楼主开始写的东西就出来了,生成的这个串不单单是取一个随机数然后加密,这样并不能保持本地上的唯一性,更别说是全球唯一了。想多了解的去MSDN查一下GUID的文档。
      

  12.   

    我们PHPer们有机会还是要接触一下外面的世界的,不能连.NET的GUID都不知道。
      

  13.   

    GUID可不是.net专有的。GUID也不是微软发明的。各种语言都有对GUID的实现。