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