How to calculate hash for a text using QCryptographicHash in Qt
hamishwillee
(Talk | contribs) m (Hamishwillee - Updated articlemetadata) |
hamishwillee
(Talk | contribs) m (Text replace - "<code cpp>" to "<code cpp-qt>") |
||
| (13 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
| − | [[Category:Qt]][[Category:UI]][[Category:Code | + | [[Category:Qt]][[Category:UI]][[Category:Code Snippet]][[Category:MeeGo Harmattan]][[Category:Symbian]][[Category:Qt Quick]] |
| − | + | {{Abstract|This code snippet shows how to calculate hash for a text string using {{Qapiname|QCryptographicHash}}. }} | |
| − | {{ArticleMetaData | + | |
| − | + | {{ArticleMetaData <!-- v1.2 --> | |
| − | + | |sourcecode= [[Media:MD4HashSample.zip]] | |
| − | + | ||
| − | + | ||
| − | |sourcecode= | + | |
|installfile= <!-- Link to installation file (e.g. [[Media:The Installation File.sis]]) --> | |installfile= <!-- Link to installation file (e.g. [[Media:The Installation File.sis]]) --> | ||
| − | |sdk=[http://www.developer.nokia.com/info/sw.nokia.com/id/da8df288-e615-443d-be5c-00c8a72435f8/Qt_SDK.html Qt SDK 1.1.3] | + | |devices= Nokia C5-00S60, Emulator, Simulator |
| − | |devicecompatability=All which support Qt | + | |sdk= [http://www.developer.nokia.com/info/sw.nokia.com/id/da8df288-e615-443d-be5c-00c8a72435f8/Qt_SDK.html Qt SDK 1.1.3] |
| − | |signing=<!-- Empty or one of Self-Signed, DevCert, Manufacturer --> | + | |platform= S60 3rd Edition FP1, S60 3rd Edition FP2, S60 5th Edition, Symbian^3, Qt 4.6, Qt 4.7 |
| − | |capabilities=<!-- Capabilities required (e.g. Location, NetworkServices. | + | |devicecompatability= All which support Qt |
| − | | | + | |dependencies= <!-- Any other/external dependencies e.g.: Google Maps Api v1.0 --> |
| − | | | + | |signing= <!-- Empty or one of Self-Signed, DevCert, Manufacturer --> |
| − | |timestamp=20110915 | + | |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]] | ||
}} | }} | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
== Source Code == | == Source Code == | ||
===Main.cpp=== | ===Main.cpp=== | ||
| − | <code cpp> | + | <code cpp-qt> |
#include <QtGui/QApplication> | #include <QtGui/QApplication> | ||
| − | #include | + | #include "qmlapplicationviewer.h" |
| − | + | ||
#include <QCryptographicHash> | #include <QCryptographicHash> | ||
| − | #include | + | #include "QDeclarativeContext" |
| − | #include | + | #include "hashcalculate.h" |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | int main(int argc, char | + | 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(); | ||
| + | } | ||
| + | </code> | ||
| − | + | hashcalculate.cpp | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | <code cpp-qt> | |
| − | + | #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; | ||
| + | } | ||
| + | </code> | ||
| − | + | hashcalculate.h | |
| − | + | <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> | </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 == | ||
| − | [[ | + | 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 Example
Source file: Media:MD4HashSample.zip
Tested with
SDK: Qt SDK 1.1.3
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
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 |
Source Code
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 = ""
}
}
}
ScreenShots
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
Full source code can be downloaded from here : Media:MD4HashSample.zip




