青青子衿, 悠悠我心, 但为君故, 沉吟至今
« 谷歌地球5.1版发布Google推出Google Maps地图版大富翁游戏 »

UCenter密码算法规则和生成方法

  康盛的系列产品,包括Discuz、UCHome、Supesite都集成了同一个用户系统——UCenter,用户登录的密码也保存在UCenter中,对于其他系统集成或导出数据到UCenter系统,通常会遇到密码生成的问题,这里就讨论一下UCenter的用户密码算法规则和生成方法。

  密码通常使用MD5对用户密码HASH后保存在数据库中的方法,如果黑客拿到了这个HASH数值,那么可以采用字典的方式暴力破解,如果这个字典数据库足够大,并且字典比较符合人们的设置习惯的话,那很容易就能破解常见的密码,因此UCenter采用了salt来防止这种暴力破解,salt是一随机字符串,它与口令连接在一起,再用单向函数对其运算,然后将salt值各单向函数运算的结果存入数据库中。如果可能的salt值的数目足够大的话,它实际上就消除了对常用口令采用的字典式攻击,因为黑客不可能在数据库中存储那么多salt和用户密码组合后的HASH值。

  UCenter的创始人密码是保存在文件中的,打开uc下面/data/config.inc.php文件,里面的UC_FOUNDERPW保存的就是密码,而UC_FOUNDERSALT保存的是SALT数值,创始人密码的创建规则是:UC_FOUNDERPW=md5(md5(PASSWORD).UC_FOUNDERSALT),就是先将密码MD5,然后添加salt,然后再次MD5,产生的HASH数值保存在config.inc.php文件中,因此修改UC_FOUNDERPW里面的数值就可以修改UCenter的创始人密码。

  UCenter的用户信息是保存在uc_members表中,在这个表中,每个用户都有一个不同的随机salt字段,表中的password字段为计算后的密码,密码计算规则是$password=md5(md5($password).$salt),也就是将用户的密码MD5后,添加salt,然后再MD5,保存在password字段中。

  因此,如果进行不同系统的数据转换,可以根据这个原理,将其他系统的用户名和密码计算后,导入UCenter的uc_members表中,实现用户的迁移。例如,如果原有系统使用的是md5(password)这样的算法保存密码,那就通过程序随机生成salt,然后计算两者累加后的md5,这样就很容易计算出这个用户在UCenter中的用户密码HASH值,从而实现用户的无缝迁移。

  不过,如果原有系统使用的是md5(password+salt)的方式保存的密码,那就无法实现密码的平滑迁移UCenter了,即使迁移,也只能人为将其UCenter的password增加一个salt才能使用,因此,我们在平时设计系统用户密码的时候,应该尽量采用md5(md5(password)+salt)的方式保存密码,这样才能方便的实现和UCenter的接口,并且保证了安全性,通常对于英文用户名来说,自建系统使用username来做salt是个简便的方法。



  除非注明,月光博客文章均为原创,转载请以链接形式标明本文地址

  本文地址:http://www.williamlong.info/archives/1922.html
  • 文章排行:
  • 1.ganlanshu
  • 学习了
    貌似有点高深!
    我对密码不大懂。。。
  • 2009/9/10 20:29:50   支持(10)反对(6) 回复
  • 2.老章书签
  • Ucenter的认证 不错。。。。
  • 2009/9/11 1:03:53   支持(13)反对(9) 回复
  • 4.巫山
  • 很好很强大密码的事还很重要
  • 2009/9/10 20:45:18   支持(8)反对(8) 回复
  • 5.我爱技术
  • Ucenter的认证 不错。。。。
  • 2009/9/10 23:50:16   支持(10)反对(10) 回复
  • 6.Spark
  • 很好的分析, 下回再分析一下, Ucenter的认证机制, 呵呵~~
  • 2009/9/10 19:02:51   支持(10)反对(11) 回复
  • 7.Kevin
  • 月光.我好像在你的blog中看到过一篇关于WEB服务器端直接将客户的HTTP请求在服务器端生成HTML页面. 而不是在客户端生成页面.防止代码被下载利用的文章 . 但今天找不到了. 麻烦你能找到后把blog地址发给我吗? 谢谢月光
    Kevin 于 2009-9-11 10:08:55 回复
    我邮箱地址 [email protected]
  • 2009/9/11 10:08:10   支持(10)反对(11) 回复
  • 8.掼蛋
  • 收藏了吧。使用论坛必学的。
  • 2009/9/13 14:27:44   支持(10)反对(11) 回复
  • 9.泰达矿冶
  • 很喜欢作者的文章,常来看看。呵呵!
  • 2009/9/22 8:09:47   支持(10)反对(11) 回复
  • 10.river
  • 请问salt这一随机字符串是每个用户一个salt还是所有用户使用一个(这种情况估计不可能,呵呵),在每个用户使用不同的salt情况下,salt是否存在重复?
  • 2009/10/12 11:01:29   支持(7)反对(8) 回复
  • 16.alex
  • 想要 破解密码的人,总会有他的办法的。不过这样确实使一些短小的密码更健壮了。
  • 2009/9/10 20:04:09   支持(7)反对(12) 回复
  • 17.二愣子小强
  • 月光,请问本文中所提的salt是什么意思?我google了好久也没找到,还请不吝指教:-)
    williamlong 于 2009-9-11 9:33:31 回复
    salt是一随机字符串,它与口令连接在一起,再用单向函数对其运算,然后将salt值各单向函数运算的结果存入数据库中。
  • 2009/9/11 8:35:38   支持(6)反对(11) 回复
  • 18.大角牛向前冲
  • 现在sns算是泛滥了。
  • 2009/9/12 14:07:23   支持(7)反对(12) 回复
  • 19.observer
  • 本文甚好,已用此原理做了个论坛自动注册的脚本,真是和谐啊
  • 2009/10/18 20:31:39   支持(9)反对(15) 回复
  • 20.HellPhantom
  • 在members表中,有些用户的密码 是纯MD5的,难道加密也分三六九等? 管理员或某些特定组的人才加密么?
  • 2009/9/10 17:46:59   支持(6)反对(13) 回复
  • 21.歪豆
  • 密码这东西,谁都需要,但谁都想知道别人的密码;设置了密码也只能防范君子,小人自有他的生存方式
  • 2009/9/10 18:03:09   支持(9)反对(18) 回复
  • 22.园子
  • UCenter 倒是用过
    不过没在意密码的算法
    呵呵~
  • 2009/9/10 17:34:37   支持(8)反对(26) 回复

发表评论:

 请勿发送垃圾信息、广告、推广信息或链接,这样的信息将会被直接删除。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 关注新浪微博:关注新浪微博
  • 关注腾讯微博:关注腾讯微博
  • 关注认证空间:关注QQ空间
  • 通过电子邮件订阅
  • 通过QQ邮件订阅

站内搜索

热文排行


月度排行

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.