1. 程式人生 > >Qt之大檔案獲取MD5值

Qt之大檔案獲取MD5值

在Qt中,QCryptographicHash類提供了生成密碼雜湊的方法。該類可以用於生成二進位制或文字資料的加密雜湊值。目前支援MD4、MD5、SHA-1、SHA-224、SHA-256、SHA-384和SHA-512。
這個類在QtCore4.3中被引入。

小檔案內容加密的時候,直接將檔案內容傳進入加密即可,但遇到大檔案的時候這樣的辦法需要優化。

思路就是:在迴圈中不停讀檔案,讀到一定大小的檔案內容,就拿去算MD5值,這樣就保證了儲存檔案內容的變數不會溢位。

#include <QString>
#include <QByteArray>
#include <QCryptographicHash>
#include <QFile>
#include <QDebug>

QByteArray getFileMd5(QString filePath)
{
    QFile localFile(filePath);

    if (!localFile.open(QFile::ReadOnly))
    {
        qDebug() << "file open error.";
        return 0;
    }

    QCryptographicHash ch(QCryptographicHash::Md5);

    quint64 totalBytes = 0;
    quint64 bytesWritten = 0;
    quint64 bytesToWrite = 0;
    quint64 loadSize = 1024 * 4;
    QByteArray buf;

    totalBytes = localFile.size();
    bytesToWrite = totalBytes;

    while (1)
    {
        if(bytesToWrite > 0)
        {
            buf = localFile.read(qMin(bytesToWrite, loadSize));
            ch.addData(buf);
            bytesWritten += buf.length();
            bytesToWrite -= buf.length();
            buf.resize(0);
        }
        else
        {
            break;
        }

        if(bytesWritten == totalBytes)
        {
            break;
        }
    }

    localFile.close();
    QByteArray md5 = ch.result();
    return md5;
}
計算出來的md5返回值是位元組陣列,如果需要轉成QString的話,直接呼叫.toHex()。

相關推薦

Qt檔案獲取MD5

在Qt中,QCryptographicHash類提供了生成密碼雜湊的方法。該類可以用於生成二進位制或文字資料的加密雜湊值。目前支援MD4、MD5、SHA-1、SHA-224、SHA-256、SHA-384和SHA-512。 這個類在QtCore4.3中被引入。 小檔案內容

Python寫自動化獲取檔案MD5

使用Python 獲取檔案的MD5 值是一件很簡單的事情,Python 提供了md5 和 hashlib 兩個模組,都可以獲取到檔案的md5值。 程式碼如下: #獲取檔案的MD5值,適用於小檔案

QT開啟檔案對話方塊,獲取檔名

檔案得主要目錄如下圖: 再mainwindow.ui中只加了一個pushbutton dialog.cpp中沒有任何操作    最後付下主要程式碼: #include "mainwindow.h" #include "ui_main

java獲取檔案MD5、SHA1,CRC32碼

import org.apache.commons.codec.digest.DigestUtils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.

JAVA獲取檔案MD5

1.推薦如下方法: /** * 推薦此方法獲取檔案MD5 * @param path 檔案路徑 * @return */ public static String get

Android獲取檔案MD5

package my.bag; import Java.io.File; import java.io.FileInputStream; import java.math.BigInteger; import java.security.MessageDigest; import java.util.Ha

fread讀取檔案以及返回問題(轉載)

今天fread檔案讀取遇到問題,本來很小的一個問題,但是一直沒有注意到,導致花了不少時間除錯,所以寫下來備忘一下。 size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); /

Struts2的入門配置檔案和傳問題

struts-base.xml檔案詳解這是struts2的基礎配置檔案必須的 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD

QTINI檔案和登錄檔操作方法學習筆記

INI檔案格式 節[section] 引數(KEY/VALUE)   name=value 註釋 註釋使用分號表示(;)。在分號後面的文字,直到該行結尾都全部為註釋 QCoreApplication::applicationDirPath()為應用程式當前的絕

QT---.pro檔案結構

Qt_Pro詳解 在QT中,有一個工具qmake可以生成一個makefile檔案,它是由.pro檔案生成而來的,.pro檔案的寫法如下: 1. 註釋 從“#”開始,到這一行結束。 2.模板變數告訴qmake為這個應用程式生成哪種makefile。 下面是可供使用的選擇:

QTAndroid下獲取手機感測器資料學習筆記

QT += core gui sensors positioning 其中sensors是獲取手機上感測器資料的元件,positioning是獲取位置資訊的元件 1、獲取陀螺儀感測器資料 #include <QGyroscope> QGyroscope *gyrosco

python選取資料夾,然後計算該資料夾下所有檔案md5,並列出md5相同的檔案到log中

因為在處理手機相簿的時候,發現有些照片儲存了好多次,為了保證一張圖片不被多次儲存,所以想到通過計算圖片md5值的方式來進行篩選。 圖片的md5值計算,使用python非常方便。 執行該py之後,會有一個對話方塊,通過選擇目錄,即可遍歷該目錄及子目錄下所有檔案,計算出md5值,並將md5值重複

Java如何獲取MD5

MD5,Message Digest Algorithm 5,是一種被廣泛使用的資訊摘要演算法,可以將給定的任意長度資料通過一定的演算法計算得出一個 128 位固定長度的雜湊值。如百科介紹,MD5 具有如下特點: 壓縮性:任意長度的原資料,其 MD5 值都是

C#實現字串,檔案獲取Md5加密校驗方法

http://jingyan.baidu.com/article/db55b6099758134ba30a2f1a.html Md5是一種雜湊演算法,理論上是不可解密的,而且重複的機率極小極小,因此在平常的密碼儲存上應用比較廣泛,這個值一般情況下是唯一的,所以在檔案校驗

用python計算出檔案md5碼,某路徑下所有檔案md5

#coding:utf-8 #md5check.py #讀檔案,轉成md5碼 #如沒有檔案路徑,則詢問 #是檔案,返回md5碼 #是路徑把其下所有檔案返回md5碼 #參考:http://www.joelverhagen.com/blog/2011/02/md5-hash-

iOS檔案MD5校驗--檔案MD5加密

    繼續上次的話題,一般大檔案下載下來,為了確定這個檔案是否下載有誤,或者檢查此檔案在下載過程中有沒有損壞,我們需要進行的一步安全性操作就是大檔案的MD5加密,用你加密的字串,和原始檔的md5字串進行校驗,看是否一樣。今天,我就簡單介紹一種大檔案的MD5加密的方法。  

java快速生成檔案MD5演算法[MD5Util.java]

package cn.hlgc.mail;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.nio.MappedByteBuffer;import java.nio.channel

用python計算檔案md5

在Python中內建了md5的實現,就是md5模組,因此可以很簡單的處理比較兩個檔案是否一致的問題。如以下程式碼片斷: import os,sys,md5 f1 = open(’f:/1.txt’,’r’) f2 = open(’f:/1.txt’,’r’) print 

[C#] 計算檔案MD5的兩種方式(直接呼叫方法計算,流計算-適用於檔案)

通過.NET中的預設類實現,但是採用不同類,針對不同的情況: 具體如下: 類: /// <summary> /// 檔案MD5操作類 /// </summary> public class MD5Checker {

mac下修改檔案md5

開啟終端 改變檔案的md5值命令: echo (隨便寫入幾個字元,不帶括號) >> /Users/carl/Downloads/要修改的檔案 檢視檔案的md5值命令: md5 /Users/carl/Downloads/要修改的檔案 對比下修