MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで保存済みのMD5文字列を10進数値に変換する方法

MySQLで保存済みのMD5文字列を10進数値に変換する方法

conv()関数とcast()関数を組み合わせて使用することで、16進数を10進数値へ変換できます。

注意 − MD5は16進数で表現されます。

サンプルテーブルの作成

まず、テーブルを作成しましょう −

mysql> create table DemoTable
(
   Password text
);
Query OK, 0 rows affected (0.60 sec)

insertコマンドを使って、テーブルにいくつかのレコードを挿入します −

mysql> insert into DemoTable values("a5391e96f8d48a62e8c85381df108e98");
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values("ea7a32d2dc5bb793af262dcb6ea1a54d");
Query OK, 1 row affected (0.18 sec)

selectステートメントで、テーブル内のすべてのレコードを確認してみましょう −

mysql> select *from DemoTable;

これにより、次のような出力が得られます −

+----------------------------------+
| Password                         |
+----------------------------------+
| a5391e96f8d48a62e8c85381df108e98 |
| ea7a32d2dc5bb793af262dcb6ea1a54d |
+----------------------------------+
2 rows in set (0.00 sec)

MD5文字列を10進数値に変換するクエリ

以下が、保存されたMD5文字列をMySQLで10進数値に変換するためのクエリです −

mysql> select cast(conv(substr(Password, 1, 16), 16, 10) as decimal(65))*18446744073709551616
+ cast(conv(substr(Password, 17, 16), 16, 10) as decimal(65)) AS DecimalValue
from DemoTable;

実行結果は次のとおりです −

+-----------------------------------------+
| DecimalValue                          |
+-----------------------------------------+
| 219619200658969319114298942978912194200 |
| 311673842057003455136843080376797734221 |
+-----------------------------------------+
2 rows in set (0.00 sec)

仕組みの解説

MD5ハッシュは128ビット(32桁の16進数)で構成されているため、64ビットまでしか扱えないconv()関数では一括変換できません。そこで、substr()関数を使って前半16桁と後半16桁に分割し、それぞれをconv()で10進数に変換します。その後、前半の値に2の64乗(18,446,744,073,709,551,616)を掛け、後半の値と合算することで、完全な128ビット相当の10進数値を求めています。大きな数値の桁あふれを防ぐため、cast()でdecimal(65)型にキャストしている点もポイントです。

  1. C++で16進数文字列をASCII文字列に変換する方法

    このチュートリアルでは、C++を使って16進数の値を含む文字列をASCII文字列に変換するプログラムについて解説します。ここでは、16進数の値が並んだ文字列が与えられます。私たちのタスクは、その16進数の値を読み取り、対応するASCII文字列へと変換することです。アルゴリズムの流れ16進数文字列から先頭から2文字ずつ部分文字列として取り出します。取り出した2文字をstoul関数を使って基数16(16進数)として解釈し、整数値に変換します。変換した整数値をchar型にキャストし、ASCII文字列に連結します。この処理を文字列の末尾まで繰り返します。サンプルコード#include <bits

  2. C#でInt32値を10進数(decimal)に変換する方法

    Int32値を10進数(decimal型)に変換するには、Convert.ToDecimal()メソッドを使用します。Int32は、32ビットの符号付き整数を表すデータ型です。金額計算など精度が求められる場面では、int値をdecimal型に変換して扱うことがよくあります。変換の基本手順まず、次のようなInt32値があったとします。int val = 2923;この値をdecimal型に変換するには、以下のように記述します。decimal decVal = Convert.ToDecimal(val);サンプルコードここからは、実際に動作する完全なプログラムを見ていきましょう。using Sy