php crypt in python

來源:互聯網
上載者:User

大半年沒有更新部落格,朋友們在我部落格的留言和提問我也都有看到,鮮少回複,感到十分抱歉。我以為我快要離開IT行業了,近兩年一直在做外包,每天都在趕進度趕進度,感到疲憊的同時,也開始懷疑自己是否對這個行業有足夠的熱情,是否有足夠的天分。但是我知道,我其實還是喜歡挑戰,那種搞定問題後的喜悅,每個程式員應該都會覺得很享受吧。我不確定自己還會在這條路上走多久,但當下,願意走的時候還會好好走。

切入正題,今天遇到一個問題,記錄一下。

手上有一批使用者名稱密碼,密碼是用PHP中的crypt()方法加密過的。而現在,我要在Python的環境裡驗證這個密碼,看看使用者提交的密碼與現有的加密後的密碼是否匹配。怎麼辦?首先要知道PHP裡面對密碼的加密和驗證是怎麼做的。

加密:$PWD = crypt($PASSWORD)驗證:if(crypt($PASSWORD,$PWD) ==  $PWD)

在PHP中,crypt方法到底用什麼演算法加密(DES還是MD5)會根據作業系統環境的不同而不同的。python中也有crypt方法,我直接按一樣的方式使用這個方法,可惜並不奏效。那麼要想,現有的系統中,到是用了DES還是MD5還是其它呢?這個判斷方法我沒有深究,我在網上看到,不同密碼編譯演算法出來的加密結果,格式上會有分別,如下:

<?phpif (CRYPT_STD_DES == 1) {    echo 'Standard DES: ' . crypt('rasmuslerdorf', 'rl') . "\n";}if (CRYPT_EXT_DES == 1) {    echo 'Extended DES: ' . crypt('rasmuslerdorf', '_J9..rasm') . "\n";}if (CRYPT_MD5 == 1) {    echo 'MD5:          ' . crypt('rasmuslerdorf', '$1$rasmusle$') . "\n";}if (CRYPT_BLOWFISH == 1) {    echo 'Blowfish:     ' . crypt('rasmuslerdorf', '$2a$07$rasmuslerd...........$') . "\n";}?>

我的密碼格式是如:$1$7F..C32.$fLd0lxCK.ea3nhEuKcTIP0,我根據格式判斷,現在系統是使用了MD5的演算法。

於是問題的關鍵字就變成 python crypt md5。我找到了下面的方法:

from passlib.hash import md5_cryptverifyed = md5_crypt.verify(passwd, cryptedpwd)

passwd是使用者提交的純文字密碼,cryptedpwd是PHP裡加密過的密碼,如果驗證通過,verifyed就會為true。

使用passlib.hash這個模組,需要先安裝passlib,我一般使用easy_install安裝:easy_install pass lib

OK,記錄到此。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.