計算文件的md5值

利用Python計算文件MD5值(從前臺上傳一個文件,後臺計算MD5值後,返給前端)前端

注意題目要求:從前臺上傳一個文件,後臺計算MD5值後,返給前端,這就須要咱們再引入一個os模塊實現輸入功能。python

首先介紹一下md5值是什麼,MD5的全稱是Message-Digest Algorithm 5.在90年代初由MIT的計算機科學實驗室和RSA Data Security Inc發明.經MD2.MD3和MD4發展而來. Message-Digest泛指字節串(Message)的Hash變換.就是把一個任意長度的字節串變換成必定長的大整數.請注意我使用了[字節串"而不是[字符串"這個詞.是由於這種變換隻與字節的值有關.與字符集或編碼方式無關. MD5將任意長度的[字節串"變換成一個128bit的大整數.而且它是一個不可逆的字符串變換算法.換句話說就是.即便你看到源程序和算法描述.也沒法將一個MD5的值變換回原始的字符串MD5還普遍用於加密和解密技術上.算法

       在不少操做系統中.用戶的密碼是以MD5值(或相似的其它算法)的方式保存的. 用戶Login的時候.系統是把用戶輸入的密碼計算成MD5值.而後再去和系統中保存的MD5值進行比較.而系統並不[知道"用戶的密碼是什麼.MD5在論壇上.軟件發佈時常常用.是爲了保證文件的正確性.防止一些人盜用程序.數據結構

 

      爲了計算文件的md5值咱們引入python的hashlib模塊函數

 

    #coding=utf-8  
    import hashlib  
    import os #Python os模塊包含廣泛的操做系統功能。若是你但願你的程序可以與平臺無關的話,這個模塊是尤其重要的。  
    _FILE_SLIM=100*1024*1024  
    def File_md5(filename):  
        calltimes = 0     #分片的個數  
        hmd5 = hashlib.md5()  
        fp = open(filename, "rb")  
        f_size = os.stat(filename).st_size #獲得文件的大小  
        if f_size > _FILE_SLIM:  
            while (f_size > _FILE_SLIM):  
                hmd5.update(fp.read(_FILE_SLIM))  
                f_size /= _FILE_SLIM  
                calltimes += 1  # delete    #文件大於100M時進行分片處理  
            if (f_size > 0) and (f_size <= _FILE_SLIM):  
                hmd5.update(fp.read())  
        else:  
            hmd5.update(fp.read())  
        return (hmd5.hexdigest(), calltimes)  
      
    filepath = raw_input('請輸入文件路徑: ')  
    print File_md5(filepath)  

 

 在計算文件的md5值時,遇到大文件(假設大於100M)時,不能簡單的一次載入內存,須要對文件分片不斷的update完成(須要分片)編碼

       Python的hashlib提供了常見的摘要算法,如MD5,SHA1等等。
       什麼是摘要算法呢?摘要算法又稱哈希算法、散列算法。它經過一個函數,把任意長度的數據轉換爲一個長度固定的數據串(一般用16進制的字符串表示)。
加密

分片的簡單例子:spa

    import hashlib</span>  
    md5 = hashlib.md5()  
    md5.update('how to use md5 in python hashlib?')  
    print md5.hexdigest()  

 分片:操作系統

    md5 = hashlib.md5()  
    md5.update('how to use md5 in ')  
    md5.update('python hashlib?')  
    print md5.hexdigest()  

 md5的使用:.net

    mymd5=hashlib.md5()   #產生一個新的md5類型對象mymd5  
    mymd5.update()   #用傳入參數改變mymd5對象,返回傳如參數的md5值  

 

若是m.update(a)以後在 m.update(b),那麼就至關於m.update(a+b)

md5.hexhashlib()  #返回一個十六進制的32位md5值

input()函數支持用戶輸入數字或者表達式,不支持輸入字符串.返回的是數字類型的數值. raw_input()函數捕獲的是用戶的原始輸入,返回爲字符串.

相關文章
相關標籤/搜索