前言
我在公司内部做了一个“接口管理系统”(DRIM),这个系统的用户认证需要与公司已有的代码管理平台gitlab保持一致,采用的方式是DRIM直接读gitlab的数据库来做认证,所以需要知道gitlab是如何对密码做加密的。
过程
1.寻找数据库
这个过程很简单,很快就找到了其users表,里面有 encrypted_password一列,用来展示密码加密后的字符串。
2.寻找加密算法
虽然已经找到了密文的字符串,但ta并不是一般的sha1/md5之流,所以在gitlabhq@github上狂找,狂搜代码,妄想着能找到诸如user.login($username, $userpasswd)的函数实现,但一个都小时毫无收获。
后来google到一个网页说的是devise用什么加密算法,devise我在源码里见过很多次,而且其一定是跟认证有关的。遂继续看devise,原来ta是RoR的一个用户认证组件,很容易集成到RoR应用中,来相当完美+简单得解决用户认证(对每个系统而言,用户认证的流程基本一样,这也是devise作为独立组件的意义)。
devise