×
Namespaces

Variants
Actions
(Difference between revisions)

How to calculate hash for a text using QCryptographicHash in Qt

From Nokia Developer Wiki
Jump to: navigation, search
valderind4 (Talk | contribs)
hamishwillee (Talk | contribs)
m (Text replace - "<code cpp>" to "<code cpp-qt>")
 
(27 intermediate revisions by 6 users not shown)
Line 1: Line 1:
{{ReviewerApproved}}
+
[[Category:Qt]][[Category:UI]][[Category:Code Snippet]][[Category:MeeGo Harmattan]][[Category:Symbian]][[Category:Qt Quick]]
[[Category:Qt]][[Category:Qt for Symbian]][[Category:Code Examples]]
+
{{Abstract|This code snippet shows how to calculate hash for a text string using {{Qapiname|QCryptographicHash}}. }}
__NOTOC__
+
 
__NOEDITSECTION__
+
{{ArticleMetaData <!-- v1.2 -->
{{CodeSnippet
+
|sourcecode= [[Media:MD4HashSample.zip]]
|id=...
+
|installfile= <!-- Link to installation file (e.g. [[Media:The Installation File.sis]]) -->
|platform=S60 3rd Edition FP1, S60 3rd Edition FP2, S60 5th Edition  
+
|devices= Nokia C5-00S60, Emulator, Simulator
|devices= S60 Emulator
+
|sdk= [http://www.developer.nokia.com/info/sw.nokia.com/id/da8df288-e615-443d-be5c-00c8a72435f8/Qt_SDK.html Qt SDK 1.1.3]
|category=Qt for S60
+
|platform= S60 3rd Edition FP1, S60 3rd Edition FP2, S60 5th Edition, Symbian^3,  Qt 4.6, Qt 4.7
|subcategory=UI
+
|devicecompatability= All which support Qt
|creationdate=10 April 2009
+
|dependencies= <!-- Any other/external dependencies e.g.: Google Maps Api v1.0 -->
|keywords=QCryptographicHash,QByteArray
+
|signing= <!-- Empty or one of Self-Signed, DevCert, Manufacturer -->
 +
|capabilities= <!-- Capabilities required by the article/code example (e.g. Location, NetworkServices. -->
 +
|keywords= QCryptographicHash
 +
|language= <!-- Language category code for non-English topics - e.g. Lang-Chinese -->
 +
|translated-by= <!-- [[User:XXXX]] -->
 +
|translated-from-title= <!-- Title only -->
 +
|translated-from-id= <!-- Id of translated revision -->
 +
|review-by= [[User:NegInfinity]]
 +
|review-timestamp= 20110915
 +
|update-by=  [[User:vineet.jain]]
 +
|update-timestamp=  20120224
 +
|creationdate= 20090410
 +
|author= [[User:Mind freak]]
 
}}
 
}}
  
== Introduction ==
 
The QCryptographicHash class provides a way to generate cryptographic hashes.
 
  
QCryptographicHash can be used to generate cryptographic hashes of binary or text data.
+
== Source Code ==
  
This cryptography is used when you want to send any data in secure way to the other.The encrypted text is called chiper text.
+
===Main.cpp===
==Preconditions==
+
<code cpp-qt>
* [http://pepper.troll.no/s60prereleases/ Download the latest Qt for S60 distribution from Qt].
+
#include <QtGui/QApplication>
* Install Qt for S60:[[Installing Qt on S60]]
+
#include "qmlapplicationviewer.h"
* Check this link for installation guide: [http://pepper.troll.no/s60prereleases/doc/install-s60.html How to install the package].
+
#include <QCryptographicHash>
* Go through this article: [[Getting started with Qt for S60]]
+
#include "QDeclarativeContext"
 +
#include "hashcalculate.h"
  
== Some Related Function ==
+
int main(int argc, char *argv[])
*Adds the data to the cryptographic hash.
+
{
+
    QApplication app(argc, argv);
QByteArray string="Nokia";
+
hash->addData(string);
+
  
*Returns the final hash value.
+
    HashCalculate*ihashcalc =  new HashCalculate();
 +
    QmlApplicationViewer viewer;
 +
    viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
 +
    QDeclarativeContext *ctxt = viewer.rootContext();
 +
    ctxt->setContextProperty("myContextProperty",ihashcalc);
 +
    viewer.setMainQmlFile(QLatin1String("qml/MD4HashSample/main.qml"));
 +
    viewer.showExpanded();
 +
    return app.exec();
 +
}
 +
</code>
  
QByteArray string1=hash->result();
+
hashcalculate.cpp
  
== Source Code ==
+
<code cpp-qt>
 +
#include "hashcalculate.h"
 +
#include <QCryptographicHash>
 +
#include "QDebug"
 +
HashCalculate::HashCalculate(QObject *parent) :
 +
    QObject(parent)
 +
{
 +
    iHashValue = "";
 +
}
  
===Main.cpp===
+
void HashCalculate::calculateHash(const QString& aOriginalText )
<code cpp>
+
{
 +
QCryptographicHash hash(QCryptographicHash::Md4);
 +
hash.addData(aOriginalText.toUtf8());
 +
SetHash(QString(hash.result().toHex()));
 +
//qDebug() << QString(hash.result().toHex());
 +
}
  
#include <QtGui/QApplication>
+
void HashCalculate::SetHash(const QString& aHashValue)
#include "textcodec.h"
+
#include<QWidget>
+
#include<QHBoxLayout>
+
#include <QCryptographicHash>
+
#include<QString>
+
#include<QByteArray>
+
#include<QLabel>
+
int main(int argc, char *argv[])
+
 
{
 
{
    QApplication a(argc, argv);
+
iHashValue = aHashValue;
    QWidget *win=new QWidget();
+
}
    QHBoxLayout *lay=new QHBoxLayout();
+
 
    QLabel *lbl=new QLabel();
+
QString HashCalculate::getHash()
    QLabel *lbl1=new QLabel("Encrypted Text:");
+
{
    lbl1->setBuddy(lbl);
+
return iHashValue;
    QByteArray string="Nokia";
+
    QCryptographicHash *hash=new QCryptographicHash(QCryptographicHash::Md4);
+
    hash->addData(string);
+
    QByteArray string1=hash->result();
+
    lbl->setText(string1);
+
    lay->addWidget(lbl1);
+
    lay->addWidget(lbl);
+
    win->setLayout(lay);
+
    win->setStyleSheet("* { background-color:rgb(199,147,88); padding: 7px ;  color:rgb(255,255,255)}");
+
    win->showMaximized();
+
    return a.exec();
+
 
}
 
}
 
</code>
 
</code>
  
==ScreenShot==
+
hashcalculate.h
More About [http://qt.nokia.com/doc/4.5/qcryptographichash.html QCryptographicHash]
+
 
 +
<code cpp-qt>
 +
#ifndef HASHCALCULATE_H
 +
#define HASHCALCULATE_H
 +
 
 +
#include <QObject>
 +
 
 +
class HashCalculate : public QObject
 +
{
 +
    Q_OBJECT
 +
public:
 +
    explicit HashCalculate(QObject *parent = 0);
 +
    Q_INVOKABLE void calculateHash(const QString& aOriginalText );
 +
 
 +
signals:
 +
 
 +
public slots:
 +
      QString getHash();
 +
      void SetHash(const QString& aHashValue);
 +
public:
 +
      QString iHashValue;
 +
 
 +
};
 +
 
 +
#endif // HASHCALCULATE_H
 +
</code>
 +
 
 +
Main.qml
 +
 
 +
<code cpp-qt>
 +
import QtQuick 1.0
 +
import com.nokia.symbian 1.0
 +
 
 +
Window {
 +
    id: window
 +
 
 +
    StatusBar {
 +
        id: statusBar
 +
        anchors.top: window.top
 +
    }
 +
 
 +
    PageStack {
 +
        id: pageStack
 +
        anchors { left: parent.left; right: parent.right; top: statusBar.bottom; bottom: toolBar.top }
 +
    }
 +
 
 +
    ToolBar {
 +
        id: toolBar
 +
        anchors.bottom: window.bottom
 +
        tools: ToolBarLayout {
 +
            id: toolBarLayout
 +
            ToolButton {
 +
                flat: true
 +
                iconSource: "toolbar-back"
 +
                onClicked: pageStack.depth <= 1 ? Qt.quit() : pageStack.pop()
 +
            }
 +
        }
 +
    }
 +
 
 +
    Component.onCompleted: {
 +
        pageStack.push(Qt.resolvedUrl("MainPage.qml"))
 +
    }
 +
}
 +
 
 +
</code>
 +
 
 +
MainPage.qml
 +
 
 +
<code cpp-qt>
 +
import QtQuick 1.0
 +
import com.nokia.symbian 1.0
 +
 
 +
Page {
 +
    id: mainPage
 +
 
 +
    Text {
 +
        text: qsTr("Enter Text:")
 +
        id:textorg
 +
        color: platformStyle.colorNormalLight
 +
        font.pixelSize: 20
 +
        x:text_originaltxt.x
 +
        y:text_originaltxt.y-45
 +
    }
 +
 
 +
    Text {
 +
        text: qsTr("MD4 Hash :")
 +
        id: txthshd
 +
        color: platformStyle.colorNormalLight
 +
        font.pixelSize: 20
 +
        x:text_hashedtxt.x
 +
        y:text_hashedtxt.y-40
 +
 
 +
    }
 +
 
 +
    TextField {
 +
        id: text_originaltxt
 +
        x: parent.x+5
 +
        y:parent.y+55
 +
        width: parent.width-15
 +
        text : "Nokia"
 +
 
 +
    }
 +
    TextField {
 +
        id: text_hashedtxt
 +
        x: text_originaltxt.x
 +
        y:text_originaltxt.y+110
 +
        width: parent.width-15
 +
        readOnly: true
 +
        text : ""
 +
 
 +
    }
 +
 
 +
    Button {
 +
            id: btnhash
 +
            x:parent.x+50
 +
            y:text_hashedtxt.y+text_hashedtxt.height+txthshd.height+5
 +
            text: "Get Hash"
 +
            onClicked: {
 +
                myContextProperty.calculateHash(text_originaltxt.text)
 +
                text_hashedtxt.text = myContextProperty.getHash()
 +
            }
 +
        }
 +
    Button {
 +
            id: btnclr
 +
            x:parent.x+btnhash.width+130
 +
            y:text_hashedtxt.y+text_hashedtxt.height+txthshd.height+5
 +
            text: "Clear"
 +
            onClicked: {
 +
                text_originaltxt.text = ""
 +
                text_hashedtxt.text = ""
 +
            }
 +
        }
 +
 
 +
}
 +
 
 +
</code>
 +
==ScreenShots==
 +
 
 +
[[File:MD4HashBlank.jpg]]  [[File:MD4Hashenter.jpg]]  [[File:MD4Hash1.jpg]]
 +
 
 +
== About the Update ==
 +
 
 +
The implementation has now been converted using the Qt Quick components.As compared with the previous functionality in which a hard-coded text was getting converted into a hash, now the user has flexibility to enter any text & convert it into a hash code as visible in the screenshots.
 +
 
 +
== Source Code ==
  
[[Image:Crypto.JPG]]
+
Full source code can be downloaded from here : [[Media:MD4HashSample.zip]]
 +
<!-- Translation --> [[pt:Como criptografar um texto usando QCryptographicHash, em Qt]]

Latest revision as of 04:17, 11 October 2012

This code snippet shows how to calculate hash for a text string using QCryptographicHash.

Article Metadata
Code ExampleTested with
Devices(s): Nokia C5-00S60, Emulator, Simulator
Compatibility
Platform(s): S60 3rd Edition FP1, S60 3rd Edition FP2, S60 5th Edition, Symbian^3, Qt 4.6, Qt 4.7
Symbian
Device(s): All which support Qt
Article
Keywords: QCryptographicHash
Created: mind_freak (10 Apr 2009)
Updated: vineet.jain (24 Feb 2012)
Reviewed: NegInfinity (15 Sep 2011)
Last edited: hamishwillee (11 Oct 2012)


Contents

[edit] Source Code

[edit] Main.cpp

#include <QtGui/QApplication>
#include "qmlapplicationviewer.h"
#include <QCryptographicHash>
#include "QDeclarativeContext"
#include "hashcalculate.h"
 
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
 
HashCalculate*ihashcalc = new HashCalculate();
QmlApplicationViewer viewer;
viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
QDeclarativeContext *ctxt = viewer.rootContext();
ctxt->setContextProperty("myContextProperty",ihashcalc);
viewer.setMainQmlFile(QLatin1String("qml/MD4HashSample/main.qml"));
viewer.showExpanded();
return app.exec();
}

hashcalculate.cpp

#include "hashcalculate.h"
#include <QCryptographicHash>
#include "QDebug"
HashCalculate::HashCalculate(QObject *parent) :
QObject(parent)
{
iHashValue = "";
}
 
void HashCalculate::calculateHash(const QString& aOriginalText )
{
QCryptographicHash hash(QCryptographicHash::Md4);
hash.addData(aOriginalText.toUtf8());
SetHash(QString(hash.result().toHex()));
//qDebug() << QString(hash.result().toHex());
}
 
void HashCalculate::SetHash(const QString& aHashValue)
{
iHashValue = aHashValue;
}
 
QString HashCalculate::getHash()
{
return iHashValue;
}

hashcalculate.h

#ifndef HASHCALCULATE_H
#define HASHCALCULATE_H
 
#include <QObject>
 
class HashCalculate : public QObject
{
Q_OBJECT
public:
explicit HashCalculate(QObject *parent = 0);
Q_INVOKABLE void calculateHash(const QString& aOriginalText );
 
signals:
 
public slots:
QString getHash();
void SetHash(const QString& aHashValue);
public:
QString iHashValue;
 
};
 
#endif // HASHCALCULATE_H

Main.qml

import QtQuick 1.0
import com.nokia.symbian 1.0
 
Window {
id: window
 
StatusBar {
id: statusBar
anchors.top: window.top
}
 
PageStack {
id: pageStack
anchors { left: parent.left; right: parent.right; top: statusBar.bottom; bottom: toolBar.top }
}
 
ToolBar {
id: toolBar
anchors.bottom: window.bottom
tools: ToolBarLayout {
id: toolBarLayout
ToolButton {
flat: true
iconSource: "toolbar-back"
onClicked: pageStack.depth <= 1 ? Qt.quit() : pageStack.pop()
}
}
}
 
Component.onCompleted: {
pageStack.push(Qt.resolvedUrl("MainPage.qml"))
}
}

MainPage.qml

import QtQuick 1.0
import com.nokia.symbian 1.0
 
Page {
id: mainPage
 
Text {
text: qsTr("Enter Text:")
id:textorg
color: platformStyle.colorNormalLight
font.pixelSize: 20
x:text_originaltxt.x
y:text_originaltxt.y-45
}
 
Text {
text: qsTr("MD4 Hash :")
id: txthshd
color: platformStyle.colorNormalLight
font.pixelSize: 20
x:text_hashedtxt.x
y:text_hashedtxt.y-40
 
}
 
TextField {
id: text_originaltxt
x: parent.x+5
y:parent.y+55
width: parent.width-15
text : "Nokia"
 
}
TextField {
id: text_hashedtxt
x: text_originaltxt.x
y:text_originaltxt.y+110
width: parent.width-15
readOnly: true
text : ""
 
}
 
Button {
id: btnhash
x:parent.x+50
y:text_hashedtxt.y+text_hashedtxt.height+txthshd.height+5
text: "Get Hash"
onClicked: {
myContextProperty.calculateHash(text_originaltxt.text)
text_hashedtxt.text = myContextProperty.getHash()
}
}
Button {
id: btnclr
x:parent.x+btnhash.width+130
y:text_hashedtxt.y+text_hashedtxt.height+txthshd.height+5
text: "Clear"
onClicked: {
text_originaltxt.text = ""
text_hashedtxt.text = ""
}
}
 
}

[edit] ScreenShots

MD4HashBlank.jpg MD4Hashenter.jpg MD4Hash1.jpg

[edit] About the Update

The implementation has now been converted using the Qt Quick components.As compared with the previous functionality in which a hard-coded text was getting converted into a hash, now the user has flexibility to enter any text & convert it into a hash code as visible in the screenshots.

[edit] Source Code

Full source code can be downloaded from here : Media:MD4HashSample.zip

This page was last modified on 11 October 2012, at 04:17.
414 page views in the last 30 days.
×