「Qtの基礎 - ハッシュ値」の版間の差分

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == Qtにおいて、ハッシュ値を求める手順を記載する。<br> <br><br> == ハッシュ値の求め方 == MD5やSHA-256等のハッシュを求め…」)
 
3行目: 3行目:
<br><br>
<br><br>


== ハッシュ値の求め方 ==
== ハッシュ化 ==
MD5やSHA-256等のハッシュを求めるには、<code>QCryptographicHash</code>クラスの<code>hash</code>メソッドを使用する。<br>
MD5、SHA-2、SHA-3等のハッシュを求める場合、<code>QCryptographicHash</code>クラスの<code>hash</code>メソッドを使用する。<br>
<br>
<br>
以下の例では、ラインエディットに入力した文字列から、MD4、MD5、SHA-1、SHA-256、SHA-512のハッシュ値を求めている。<br>
以下の例では、任意の文字列から、MD4、MD5、SHA-2、SHA-3のハッシュを計算している。<br>
また、サポートされているハッシュの詳細については、[http://doc.qt.io/qt-5/qcryptographichash.html#Algorithm-enum Qtの公式ドキュメント]を参照すること。<br>
<br>
サポートされているハッシュの詳細については、[http://doc.qt.io/qt-5/qcryptographichash.html#Algorithm-enum Qtの公式ドキュメント]を参照すること。<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  // MainWindow.h
  #include <QCoreApplication>
  #include <QCryptographicHash>
  #pragma once
  #include <QDebug>
  #include <QMainWindow>
namespace Ui {class MainWindow;}
   
   
  class MainWindow : public QMainWindow
  int main(int argc, char *argv[])
  {
  {
     Q_OBJECT
     QCoreApplication a(argc, argv);
   
   
public:
    // ハッシュ化する文字列
     explicit MainWindow(QWidget *parent = nullptr);
     QString input = "Hello, world!";
    ~MainWindow();
   
   
private slots:
    // MD4
     void on_pushButton_clicked();
    QByteArray md4Hash = QCryptographicHash::hash(input.toUtf8(), QCryptographicHash::Md4);
     QString md4HexHash = md4Hash.toHex();
    qDebug() << "MD4 Hash:" << md4HexHash;
   
   
private:
    // MD5
     Ui::MainWindow *ui;
     QByteArray md5Hash = QCryptographicHash::hash(input.toUtf8(), QCryptographicHash::Md5);
};
    QString md5HexHash = md5Hash.toHex();
</syntaxhighlight>
    qDebug() << "MD5 Hash:" << md5HexHash;
<br>
<syntaxhighlight lang="c++">
// MainWindow.cpp
   
   
#include <QCryptographicHash>
    // SHA-2 (SHA-224)
#include "MainWindow.h"
    QByteArray sha224Hash = QCryptographicHash::hash(input.toUtf8(), QCryptographicHash::Sha224);
#include "ui_MainWindow.h"
    QString sha224HexHash = sha224Hash.toHex();
    qDebug() << "SHA-2 (SHA-224) Hash:" << sha224HexHash;
   
   
MainWindow::MainWindow(QWidget *parent) : QWidget(parent), ui(new Ui::MainWindow)
    // SHA-2 (SHA-256)
{
    QByteArray sha256Hash = QCryptographicHash::hash(input.toUtf8(), QCryptographicHash::Sha256);
     ui->setupUi(this);
    QString sha256HexHash = sha256Hash.toHex();
}
     qDebug() << "SHA-2 (SHA-256) Hash:" << sha256HexHash;
   
   
MainWindow::~MainWindow()
    // SHA-2 (SHA-384)
{
    QByteArray sha384Hash = QCryptographicHash::hash(input.toUtf8(), QCryptographicHash::Sha384);
     delete ui;
    QString sha384HexHash = sha384Hash.toHex();
}
     qDebug() << "SHA-2 (SHA-384) Hash:" << sha384HexHash;
   
   
void MainWindow::on_pushButton_clicked()
    // SHA-2 (SHA-512)
{
    QByteArray sha512Hash = QCryptographicHash::hash(input.toUtf8(), QCryptographicHash::Sha512);
     QByteArray src = ui->lineEdit->text().toUtf8();
    QString sha512HexHash = sha512Hash.toHex();
     qDebug() << "SHA-2 (SHA-512) Hash:" << sha512HexHash;
   
   
     // MD4
     // SHA-3 (SHA3-224)
     QString md4 = QString(QCryptographicHash::hash(src, QCryptographicHash::Md4).toHex());
     QByteArray sha3_224Hash = QCryptographicHash::hash(input.toUtf8(), QCryptographicHash::Sha3_224);
     ui->label_md4->setText(md4);
    QString sha3_224HexHash = sha3_224Hash.toHex();
     qDebug() << "SHA-3 (SHA3-224) Hash:" << sha3_224HexHash;
   
   
     // MD5
     // SHA-3 (SHA3-256)
     QString md5 = QString(QCryptographicHash::hash(src, QCryptographicHash::Md5).toHex());
     QByteArray sha3_256Hash = QCryptographicHash::hash(input.toUtf8(), QCryptographicHash::Sha3_256);
     ui->label_md5->setText(md5);
    QString sha3_256HexHash = sha3_256Hash.toHex();
     qDebug() << "SHA-3 (SHA3-256) Hash:" << sha3_256HexHash;
   
   
     // SHA-1
     // SHA-3 (SHA3-384)
     QString sha1 = QString(QCryptographicHash::hash(src, QCryptographicHash::Sha1).toHex());
     QByteArray sha3_384Hash = QCryptographicHash::hash(input.toUtf8(), QCryptographicHash::Sha3_384);
     ui->label_sha1->setText(sha1);
    QString sha3_384HexHash = sha3_384Hash.toHex();
     qDebug() << "SHA-3 (SHA3-384) Hash:" << sha3_384HexHash;
   
   
     // SHA-256
     // SHA-3 (SHA3-512)
     QString sha256 = QString(QCryptographicHash::hash(src, QCryptographicHash::Sha256).toHex());
     QByteArray sha3_512Hash = QCryptographicHash::hash(input.toUtf8(), QCryptographicHash::Sha3_512);
     ui->label_sha256->setText(sha256);
    QString sha3_512HexHash = sha3_512Hash.toHex();
     qDebug() << "SHA-3 (SHA3-512) Hash:" << sha3_512HexHash;
   
   
     // SHA-512(長いので64文字で改行)
     return a.exec();
    QString sha512 = QString(QCryptographicHash::hash(src, QCryptographicHash::Sha512).toHex());
    QString sha512_disp = sha512.left(64) + QString::fromLocal8Bit("\n") + sha512.right(64);
    ui->label_sha512->setText(sha512_disp);
  }
  }
  </syntaxhighlight>
  </syntaxhighlight>

2024年5月23日 (木) 17:14時点における版

概要

Qtにおいて、ハッシュ値を求める手順を記載する。


ハッシュ化

MD5、SHA-2、SHA-3等のハッシュを求める場合、QCryptographicHashクラスのhashメソッドを使用する。

以下の例では、任意の文字列から、MD4、MD5、SHA-2、SHA-3のハッシュを計算している。

サポートされているハッシュの詳細については、Qtの公式ドキュメントを参照すること。

 #include <QCoreApplication>
 #include <QCryptographicHash>
 #include <QDebug>
 
 int main(int argc, char *argv[])
 {
    QCoreApplication a(argc, argv);
 
    // ハッシュ化する文字列
    QString input = "Hello, world!";
 
    // MD4
    QByteArray md4Hash = QCryptographicHash::hash(input.toUtf8(), QCryptographicHash::Md4);
    QString md4HexHash = md4Hash.toHex();
    qDebug() << "MD4 Hash:" << md4HexHash;
 
    // MD5
    QByteArray md5Hash = QCryptographicHash::hash(input.toUtf8(), QCryptographicHash::Md5);
    QString md5HexHash = md5Hash.toHex();
    qDebug() << "MD5 Hash:" << md5HexHash;
 
    // SHA-2 (SHA-224)
    QByteArray sha224Hash = QCryptographicHash::hash(input.toUtf8(), QCryptographicHash::Sha224);
    QString sha224HexHash = sha224Hash.toHex();
    qDebug() << "SHA-2 (SHA-224) Hash:" << sha224HexHash;
 
    // SHA-2 (SHA-256)
    QByteArray sha256Hash = QCryptographicHash::hash(input.toUtf8(), QCryptographicHash::Sha256);
    QString sha256HexHash = sha256Hash.toHex();
    qDebug() << "SHA-2 (SHA-256) Hash:" << sha256HexHash;
 
    // SHA-2 (SHA-384)
    QByteArray sha384Hash = QCryptographicHash::hash(input.toUtf8(), QCryptographicHash::Sha384);
    QString sha384HexHash = sha384Hash.toHex();
    qDebug() << "SHA-2 (SHA-384) Hash:" << sha384HexHash;
 
    // SHA-2 (SHA-512)
    QByteArray sha512Hash = QCryptographicHash::hash(input.toUtf8(), QCryptographicHash::Sha512);
    QString sha512HexHash = sha512Hash.toHex();
    qDebug() << "SHA-2 (SHA-512) Hash:" << sha512HexHash;
 
    // SHA-3 (SHA3-224)
    QByteArray sha3_224Hash = QCryptographicHash::hash(input.toUtf8(), QCryptographicHash::Sha3_224);
    QString sha3_224HexHash = sha3_224Hash.toHex();
    qDebug() << "SHA-3 (SHA3-224) Hash:" << sha3_224HexHash;
 
    // SHA-3 (SHA3-256)
    QByteArray sha3_256Hash = QCryptographicHash::hash(input.toUtf8(), QCryptographicHash::Sha3_256);
    QString sha3_256HexHash = sha3_256Hash.toHex();
    qDebug() << "SHA-3 (SHA3-256) Hash:" << sha3_256HexHash;
 
    // SHA-3 (SHA3-384)
    QByteArray sha3_384Hash = QCryptographicHash::hash(input.toUtf8(), QCryptographicHash::Sha3_384);
    QString sha3_384HexHash = sha3_384Hash.toHex();
    qDebug() << "SHA-3 (SHA3-384) Hash:" << sha3_384HexHash;
 
    // SHA-3 (SHA3-512)
    QByteArray sha3_512Hash = QCryptographicHash::hash(input.toUtf8(), QCryptographicHash::Sha3_512);
    QString sha3_512HexHash = sha3_512Hash.toHex();
    qDebug() << "SHA-3 (SHA3-512) Hash:" << sha3_512HexHash;
 
    return a.exec();
 }