無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 11 関数と演算子 :: 11.10 その他の関数 :: 11.10.2 暗号化関数と圧縮関数
« 11.10.1 ビット関数

11.10.3 情報関数 »
Section Navigation      [Toggle]
  • 11.10 その他の関数
  • 11.10.1 ビット関数
  • 11.10.2 暗号化関数と圧縮関数
  • 11.10.3 情報関数
  • 11.10.4 その他の関数

11.10.2. 暗号化関数と圧縮関数

このセクションの関数は暗号化と復号化、そして圧縮と非圧縮を行います。

暗号化または圧縮 復号化または解凍
AES_ENCRYT() AES_DECRYPT()
COMPRESS() UNCOMPRESS()
ENCODE() DECODE()
DES_ENCRYPT() DES_DECRYPT()
ENCRYPT() 使用不可
MD5() 使用不可
OLD_PASSWORD() 使用不可
PASSWORD() 使用不可
SHA() or SHA1() 使用不可
使用不可 UNCOMPRESSED_LENGTH()

注記 :暗号化および圧縮関数はバイナリ ストリングを戻します。これらの関数の多くは、結果が任意のバイト値を含む場合があります。これらの結果を保存したい場合は、CHAR や VARCHAR カラムでなく、BLOB を使用して、後続のスペースの削除でデータ値が変更される可能性を避けてください。

注記 :MD5 および SHA-1 アルゴリズムの利用についてはすでに知られています。開発者は、このセクションで紹介されている他の暗号化関数の使用も考慮してください。

  • AES_ENCRYPT(str,key_str), AES_DECRYPT(crypt_str,key_str)

    これらの関数では、以前は 「Rijndael」 として知られていた公式の AES ( Advanced Encryption Standard ) アルゴリズムを使用した、データの暗号化と復号化が可能です。128 ビットのキーの長さを使用したエンコードを行いますが、ソースを改変することで 256 ビットまで延長することができます。当社では、より速く、ほとんどの使用では十分に安全なため、128 ビットを採用しています。

    AES_ENCRYPT() はストリングを暗号化し、バイナリ ストリングを戻します。AES_DECRYPT() はストリングを暗号化されたストリングを復号化し、本来のストリングを戻します。入力引数の長さは自由です。どちらかの引数が NULL の場合は、この関数の結果も NULL になります。

    AES ブロックレベル アルゴリズムであるため、長さが不揃いなストリングのエンコードにはパッドを使用し、次の方式を使って結果ストリングの長さが計算されるようにします。

    16 × (trunc(string_length / 16) + 1)
    

    AES_DECRYPT() が無効な日付または不正確なパッドを検出した場合は、NULL が戻されます。しかし、入力データまたはキーが無効になっている場合は、AES_DECRYPT() が非 NULL 値 ( 不要データの可能性あり ) を戻すことも考えられます。

    AES 関数を使用して、暗号化されたフォームのデータを、クエリを改変することによって格納することができます :

    INSERT INTO t VALUES (1,AES_ENCRYPT('text','password'));
    

    AES_ENCRYPT() および AES_DECRYPT() は、現在 MySQL で使用が可能なものの中で、暗号的に最も安全な暗号化関数だと考えられています。

  • COMPRESS(string_to_compress)

    ストリングを圧縮し、結果をバイナリ ストリングとして戻します。この関数では、MySQL が zlib のような圧縮ライブラリとコンパイルされている必要があります。その条件が満たされない場合、その戻り値は常に 0 になります。圧縮されたストリングは、UNCOMPRESS() によって非圧縮することができます。

    mysql> SELECT LENGTH(COMPRESS(REPEAT('a',1000)));
            -> 21
    mysql> SELECT LENGTH(COMPRESS(''));
            -> 0
    mysql> SELECT LENGTH(COMPRESS('a'));
            -> 13
    mysql> SELECT LENGTH(COMPRESS(REPEAT('a',16)));
            -> 15
    

    圧縮されたストリングの内容は次の方法で格納されます :

    • 空のストリングは空のストリングとして格納。

    • 空でないストリングは、圧縮されたストリングの後に、4 バイト長の非圧縮ストリングとして ( 下位バイトから ) 格納されます。ストリングの最後にスペースがある場合は、最後のスペースが除かれることがないよう、‘.’ 文字が追加されます。結果は CHAR または VARCHAR カラムに格納されます。( CHAR または VARCHAR を使用して、圧縮されたストリングを保存するのはお薦めできません。BLOB カラムをご使用ください。 )

  • DECODE(crypt_str,pass_str)

    暗号化されたストリング crypt_str を、pass_str を使用し、パスワードとして復号化します。crypt_str は、ENCODE() から戻されたストリングであるべきです。

  • ENCODE(str,pass_str)

    pass_str を使用し、str をパスワードとして暗号化します。結果を復号化するには DECODE() を用います。

    結果は、str と同じ長さのバイナリ ストリングになります。

    暗号化の強度は、ランダム発生器の質によります。短いストリングでも十分です。

  • DES_DECRYPT(crypt_str[,key_str])

    DES_ENCRYPT() によって暗号化されたストリングを復号化します。エラーが起きた場合、この関数は NULL を戻します。

    この関数は、MySQL が SSL サポートで設定されている場合のみ作動しますのでご注意ください。詳細は 項4.8.7. 「接続安全」 を参照してください。

    key_str 引数が与えられていない場合、DES_DECRYPT() は暗号化されたストリングの最初のバイトを調査して、本来のストリングの暗号化に使用した DES キー ナンバーを特定し、DES キー ファイルからキーを読み取って、メッセージを復号化します。これを正しく行うには、ユーザは SUPER 権限を持っている必要があります。キー ファイルは --des-key-file サーバ オプションで特定できます。

    この関数を key_str 引数に渡した場合、そのストリングはメッセージの復号化のキーとして使用されます。

    crypt_str 引数が暗号化されたストリングでない場合は、MySQL は与えられた crypt_str を戻します。

  • DES_ENCRYPT(str[,{key_num|key_str}])

    Triple-DES アルゴリズムを使用して、与えられたキーでストリングを暗号化します。

    この関数は、MySQL が SSL サポートで設定されている場合のみ作動しますのでご注意ください。詳細は 項4.8.7. 「接続安全」 を参照してください。

    使用する暗号化キーは、与えられていれば、DES_ENCRYPT() への 2 番目の引数に基づいて選択されます :

    引数 解説
    引数なし DES キー ファイルの最初のキーが使用される。
    key_num DES キー ファイルからの与えられたキー番号 ( 0-9 ) が使用される。
    key_str 与えられたキー ストリングが str の暗号化に使用される。

    キー ファイルは --des-key-file サーバ オプションで特定できます。

    戻されるストリングは、最初の文字が CHAR(128 | key_num) であるバイナリ ストリングです。エラーが起きた場合、DES_ENCRYPT() は NULL を戻します。

    暗号化されたキーが分かりやすいように、128 が加えられます。ストリング キーを使用する場合は、key_num は 127 です。

    結果のストリングの長さは次の方式によって提示されます :

    new_len = orig_len + (8 - (orig_len % 8)) + 1
    

    DES キー ファイルの各ラインは次のフォーマットを含みます :

    key_num des_key_str
    

    各 key_num 値は、0 から 9 の範囲の数字でなければなりません。ファイル内のラインの順は特定されていません。des_key_str はメッセージの暗号化に使用されるストリングです。数字とキーの間には、少なくともひとつはスペースが入ります。最初のキーは、DES_ENCRYPT() へのキー引数を指定しなかった場合に使用されるデフォルトのキーです。

    MySQL に、キー ファイルからの新しいキー値を、FLUSH DES_KEY_FILE 文で読み込むよう指示することができます。これには RELOAD 権限が必須です。

    デフォルト キーのセットを持つことの利点のひとつは、エンドユーザにこれらの値を復号化する権利を与えることなく、既存の暗号化されたカラム値を確認する方法をアプリケーションに与えられることです。

    mysql> SELECT customer_address FROM customer_table 
         > WHERE crypted_credit_card = DES_ENCRYPT('credit_card_number');
    
  • ENCRYPT(str[,salt])

    Unix crypt() システム呼び出しを使って str を暗号化し、バイナリ ストリングを戻します。salt 引数は少なくとも 2 文字のストリングでなければいけません。salt が与えられていない場合は、ランダム値が使用されます。

    mysql> SELECT ENCRYPT('hello');
            -> 'VxuFAJXVARROc'
    

    ENCRYPT() は、少なくともいくつかのシステムでは、str の最初の 8 文字以外のすべてを無視します。この動作は、crypt() システム呼び出しを基本とした実装によって定められています。

    utf8 以外のマルチバイト文字セットとの ENCYPT() の使用は、システム呼び出しが、ストリングがゼロ バイトによって終了させられると想定するため、お薦めできません。

    crypt() が使用しているシステムで利用できない場合 ( Windows のケースなど ) 、ENCRYPT() は常に NULL を戻します。

  • MD5(str)

    MD5 128 ビットのチェックサムを、ストリング用に計算します。その値は 32 16進数のバイナリ ストリングとして戻され、または引数が NULL の場合は NULL が戻されます。例として、戻り値をハッシュ キーとして使用することができます。

    mysql> SELECT MD5('testing');
            -> 'ae2b1fca515949e5d54fb22b8ed95575'
    

    これは、「RSA Data Security, Inc. MD5 Message-Digest Algorithm.」 です。

    値を大文字に変換したい場合は、項11.8. 「キャスト関数と演算子」 の BINARY 演算子のエントリで挙げられているバイナリ ストリングの変換に関する説明をご覧ください。

    このセクション始めの MD5 アルゴリズムに関する注記をご覧ください。

  • OLD_PASSWORD(str)

    セキュリティ向上のため、PASSWORD() の実装が変更された際に、OLD_PASSWORD() が MySQL に追加されました。OLD_PASSWORD() は PASSWORD() のバイナリ ストリングの旧 ( 4.1 の前 ) 実装の値を戻し、使用しているバージョンの 5.1 MySQL サーバに接続する必要のある 4.1 より前のクライアントが、自らを締め出すことなく、パスワードをリセットすることを許可することが目的です。詳細は 項4.7.9. 「MySQL 4.1 のパスワードハッシュ」 を参照してください。

  • PASSWORD(str)

    平文のパスワード str からパスワード ストリングを計算して戻し、バイナリ ストリングか、引数が NULL の場合は NULL を戻します。この関数を使用して、user 権限テーブルの Password カラムの格納の MySQL パスワードを暗号化します。

    mysql> SELECT PASSWORD('badpwd');
            -> '*AAB3E285149C0135D51A520E1940DD3263DC008C'
    

    PASSWORD() の暗号化は一方的なものです ( 可逆性はない ) 。

    PASSWORD() の行うパスワードの暗号化は、Unix パスワードの暗号化とは異なります。ENCRYPT() を参照してください。

    注記 :PASSWORD() 関数は、MySQL サーバの認証システムによって使用されます。独自にアプリケーションでは使用しないで ください。その代わりには、MD5() または SHA1() をお薦めします。また、RFC 2195, section 2 (Challenge-Response Authentication Mechanism (CRAM)) で、パスワードの扱いとアプリケーションの認証セキュリティーについての詳細をご覧ください。

  • SHA1(str), SHA(str)

    ストリングの SHA-1 160 ビットのチェックサムを、RFC 3174 ( Secure Hash Algorithm ) で説明されているように計算します。その値は 40 16進数のバイナリ ストリングとして戻され、または引数が NULL の場合は NULL が戻されます。この関数の使用例のひとつとして、ハッシュ キーとしての使用が考えられます。また、パスワードの保管のための暗号化関数としても使用できます。 SHA() は SHA1() と同義です。

    mysql> SELECT SHA1('abc');
            -> 'a9993e364706816aba3e25717850c26c9cd0d89d'
    

    SHA1() は、 MD5() と同等に、暗号化に関してはさらに安全であると考えられています。ただし、このセクション始めの MD5 と SHA-1 アルゴリズムに関する注記をご参照ください。

  • UNCOMPRESS(string_to_uncompress)

    COMPRESS() 関数によって圧縮されたストリングを非圧縮します。引数が圧縮された値でない場合は、結果は NULL になります。この関数では、MySQL が zlib のような圧縮ライブラリとコンパイルされている必要があります。その条件が満たされない場合、その戻り値は常に NULL になります。

    mysql> SELECT UNCOMPRESS(COMPRESS('any string'));
            -> 'any string'
    mysql> SELECT UNCOMPRESS('any string');
            -> NULL
    
  • UNCOMPRESSED_LENGTH(compressed_string)

    圧縮されたストリングの、圧縮前の長さを戻します。

    mysql> SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('a',30)));
            -> 30
    
Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.