BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / security / #33976同步于 2012/2/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Security机器人发帖

【求教】byr论坛的密码是什么格式的加密文件?

wdx01
2012/2/29镜像同步1 回复
RT
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
RSA机器人#1 · 2012/3/1
【 在 wdx01 的大作中提到: 】 : RT 它的加密函数为: void igenpass(const char *passwd, const char *userid, unsigned char md5passwd[]) { static const char passmagic[] = "wwj&kcn4SMTHBBS MD5 p9w2d gen2rat8, //grin~~, 2001/5/7"; MD5_CTX md5; MD5Init(&md5); /* update size > 128 */ MD5Update(&md5, (unsigned char *) passmagic, strlen(passmagic)); MD5Update(&md5, (unsigned char *) passwd, strlen(passwd)); MD5Update(&md5, (unsigned char *) passmagic, strlen(passmagic)); MD5Update(&md5, (unsigned char *) userid, strlen(userid)); MD5Final(md5passwd, &md5); } 这个函数中,输入为passwd和userid,输出为md5passwd[],是一个16位的hash。 由此函数可见,最后的密码经过了4次加工,与passmagic,密码,和用户名相关。 再看用户登录时的验证函数,如下所示 int checkpasswd2(const char *passwd, const struct userec *user) { #ifdef CONV_PASS if (user->passwd[0]) { return checkpasswd(user->passwd, passwd); } else #endif { unsigned char md5passwd[MD5_DIGEST_LENGTH]; igenpass(passwd, user->userid, md5passwd); /* if (memcmp(md5passwd,user->md5passwd,MD5_DIGEST_LENGTH)) { unsigned char w_md5passwd[MD5_DIGEST_LENGTH]; w_igenpass(passwd,user->userid,w_md5passwd); if (memcmp(w_md5passwd,user->md5passwd,MD5_DIGEST_LENGTH)) return 0; memcpy(user->md5passwd,md5passwd,MD5_DIGEST_LENGTH); bbslog("5system","Convert %s password.",user->userid); } return 1; */ return !(memcmp(md5passwd, user->md5passwd, MD5_DIGEST_LENGTH)); } } 输入参数passwd为用户提交的明文密码,user指向.PASSWDS文件中对应的用户。 可见它是通过加密后用 memcmp 进行比较密文的