QT md5

MD5中的MD代表Message Digest,就是信息摘要的意思,不过这个信息摘要不是信息内容的缩写,而是根据公开的MD5算法对原信息进行数学变换后得到的一个128位(bit)的特征码。

这个特征码有如下特性,首先它不可逆,例如我有一段秘密的文字如:”My Secret Words”,经算法变换后得到MD5码(b9944e9367d2e40dd1f0c4040d4daaf7),把这个码告诉其他人,他们根据这个MD5码是没有系统的方法可以知道你原来的文字是什么的。

其次,这个码具有高度的离散性,也就是说,原信息的一点点变化就会导致MD5的巨大变化,例如”ABC” MD5(902fbdd2b1df0c4f70b4a5d23525e932)和”ABC “(多了一空格)MD5(12c774468f981a9487c30773d8093561)差别非常大,而且之间没有任何关系,也就是说产生的MD5码是不可预测的。

最后由于这个码有128位那么长,所以任意信息之间具有相同MD5码的可能性非常之低,通常被认为是不可能的。 

所以一般认为MD5码可以唯一地代表原信息的特征,通常用于密码的加密存储,数字签名,文件完整性验证等。

一:

在src 里找到md5的 h 和cpp

#include “md5.cpp”

    MD5Context md5ctx;

    MD5Init(&md5ctx);
    QString test=”yjy”;
    QByteArray arr=test.toAscii();
    MD5Update(&md5ctx,(const md5byte *)arr.data(),arr.size());
    md5byte ans[16];
    MD5Final(&md5ctx,ans);
    for (int i=0;i<16;i++){
        qDebug(“%X”,ans[i]);
    }

二:

QT中,提供了QCryptographicHash类,很方便的实现的字符串到md5/md4/sha1的转换,

可以通过两种方法实现:

QString pwd=”123456″;  
QString md5;  
QByteArray ba,bb;  
QCryptographicHash md(QCryptographicHash::Md5);  
ba.append(pwd);  
md.addData(ba);  
bb = md.result();  
md5.append(bb.toHex());  
QString pwd=”123456″;
QString md5;
QByteArray ba,bb;
QCryptographicHash md(QCryptographicHash::Md5);
ba.append(pwd);
md.addData(ba);
bb = md.result();
md5.append(bb.toHex()); 

qDebug()<<md5;

第二种方法比较直接:

QString md5;  
QString pwd=”123456″;  
QByteArray bb;  
bb = QCryptographicHash::hash ( pwd.toAscii(), QCryptographicHash::Md5 );  
md5.append(bb.toHex());

自定义信号和槽

//signals_slots.h

#ifndef _SIGNALS_SLOTS_
#define _SIGNALS_SLOTS_
#include <QObject>


class Sender : public QObject
{
public:
void dosend();
Q_OBJECT
signals:
void send(int);

};

class Mediator : public QObject
{
Q_OBJECT
signals:
void mediate(int);

};

class Receiver : public QObject
{
Q_OBJECT

public slots:
void recv(int);
};


#endif

//signals_slots.cpp

#include <QtDebug>
#include <QtCore>


#include “signals_slots.h”

void Sender :: dosend()
{
emit send(40);
}

void Receiver :: recv(int n)
{
qDebug()<<“recv number: “<<n<<endl;
}

int main(int argc, char* argv[])
{
QCoreApplication app(argc, argv);
Sender s;
Receiver r;
Mediator m;

QObject::connect(&s,SIGNAL(send(int)),&r,SLOT(recv(int)));
QObject::connect(&s,SIGNAL(send(int)),&m,SIGNAL(mediate(int)));
QObject::connect(&m,SIGNAL(mediate(int)),&r,SLOT(recv(int)));

s.dosend();

return 0;
}

Linux下iso制作

在Windows下有很多大型破解软件可以完成,但是在linux下就轻便多了。而且不用承受非法使用软件带来的不安(如果你感觉不安的话)。步骤如下

1 如果你是直接从cd压制iso文件的,执行

sudo umount /dev/cdrom
dd if=/dev/cdrom of=file.iso bs=1024

2 如果你要把某个文件或者目录压到iso文件中,需要使用mkisofs这个工具。这个工具非常强大,还可以压缩DVD格式的iso。你想改的参数都可以修改,而且还有-gui这个参数,用脚趾头猜猜是干什么的?使用linux一定要学会看帮助哦。最简单的用法如下:

mkisofs -r -o file.iso your_folder_name/

使用如下命令挂载

mount -o loop file.iso /mnt

3 如果你想装酷生成一个MD5文件,执行

md5sum file.iso > file.iso.md5

4 如果你想把一个iso文件烧制出来更简单了。右键点这个文件,然后看到了没有?有烧录的选项。我的刻录机可能不行了,每次在windiows下刻录很容易刻坏。所以我总是到ubuntu下来刻录,又快又好。

特别说说明一下,这些工具都有windows下可以运行的版本。