php crypt in python

来源:互联网 发布:ubuntu 打开jupyter 编辑:程序博客网 时间:2024/06/07 00:05

有一批用户名密码,密码是用PHP中的crypt()方法加密过的。而现在,我要在Python的环境里验证这个密码,看看用户提交的密码与现有的加密后的密码是否匹配。怎么办?首先要知道PHP里面对密码的加密和验证是怎么做的。

[php] view plain copy
  1. 加密:  
  2. $PWD = crypt($PASSWORD)  
  3.   
  4. 验证:  
  5. if(crypt($PASSWORD,$PWD) ==  $PWD)  

在PHP中,crypt方法到底用什么算法加密(DES还是MD5)会根据操作系统环境的不同而不同的。python中也有crypt方法,我直接按一样的方式使用这个方法,可惜并不奏效。那么要想,现有的系统中,到是用了DES还是MD5还是其它呢?这个判断方法我没有深究,我在网上看到,不同加密算法出来的加密结果,格式上会有分别,如下:

[php] view plain copy
  1. <?php  
  2. if (CRYPT_STD_DES == 1) {  
  3.     echo 'Standard DES: ' . crypt('rasmuslerdorf''rl') . "\n";  
  4. }  
  5.   
  6. if (CRYPT_EXT_DES == 1) {  
  7.     echo 'Extended DES: ' . crypt('rasmuslerdorf''_J9..rasm') . "\n";  
  8. }  
  9.   
  10. if (CRYPT_MD5 == 1) {  
  11.     echo 'MD5:          ' . crypt('rasmuslerdorf''$1$rasmusle$') . "\n";  
  12. }  
  13.   
  14. if (CRYPT_BLOWFISH == 1) {  
  15.     echo 'Blowfish:     ' . crypt('rasmuslerdorf''$2a$07$rasmuslerd...........$') . "\n";  
  16. }  
  17. ?>  

我的密码格式是如:$1$7F..C32.$fLd0lxCK.ea3nhEuKcTIP0,我根据格式判断,现在系统是使用了MD5的算法。

于是问题的关键字就变成 python crypt md5。我找到了下面的方法:

[python] view plain copy
  1. from passlib.hash import md5_crypt  
  2. verifyed = md5_crypt.verify(passwd, cryptedpwd)  

passwd是用户提交的明文密码,cryptedpwd是PHP里加密过的密码,如果验证通过,verifyed就会为true。

使用passlib.hash这个模块,需要先安装passlib,我一般使用easy_install安装:easy_install pass lib

OK,记录到此。

0 0
原创粉丝点击