2016-03-25 12 views
0

mysqlデータベースにデータを追加するときに、自分のPHPファイル内のデータを暗号化したいとします。PHPを使用してmysqlデータベースのデータを暗号化および復号化する方法は?

これは私がそれを行う方法です。

私のような静的なキーを作成します。私はこれがあるかどうかわからないのです

function encrypt($string, $key){ 
    $string = rtrim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $string, MCRYPT_MODE_ECB))); 
    return $string; 
} 

function decrypt($string, $key){ 
    $string = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($string), MCRYPT_MODE_ECB)); 
    return $string; 
} 

:その後、私は暗号化(と呼ばれる二つの機能を持っている

$key = md5("uJHyFVSG"); 

を)および(復号化)と、彼らがこれを行いますベストプラクティスですが、どのようにmd5以外のキーを生成するのですか?

+0

sha1を使用してください。 – Veniamin

+1

@Veniaminこれはひどい考えです。 –

答えて

1

名前にヒントがあります:Rijndael 256は256ビットのサイファーを使用しています。あなたは64ビットキーを使用しています(実際には48ビットを使用していますが、64ビットにまたがっています)。また、キーを格納するソースコード以外の場所について考えてみることもできます。

システムにはたくさんの乱数発生器があります。しかし、あなたはこのOSがどのOSで動作しているのか、どのPHPモジュールがインストールされているのかは言いませんでした。しかし、すでにmcryptを使用しているので、mcrypt_create_iv(256)を使用できます。 (ヒント:base64でエンコード値あなたはASCIIとしてそれを格納する必要がある場合

+0

あなたのコメントをお寄せいただきありがとうございます。openssl_encrypt()はどうですか? –

+1

'mcrytp_create_iv(256)'実際には、32個しか必要ありません。 –

+0

@ScottArciszewski::$ thanks – symcbean

5

その後、私は(暗号化()と呼ばれる二つの機能を持っており、復号化)実際に

Don't use the code in your question!

、再訪。あなたがそれを見つけたし、自分のコードが安全ではない、彼らはそれを使用する人々を奨励するべきではないことを伝え

を私のような静的なキーを作成します。

$key = md5("uJHyFVSG"); 

良いアイデア:Use a library

// Generate this once, then save it. 
$key = Crypto::createNewRandomKey(); 
/* 
    var_dump(Crypto::binToHex($key)); 
    // then later: 
    $key = Crypto::hexToBin("the generated hex characters go here"); 
*/ 

// To encrypt: 
$encrypted = Crypto::encrypt(
    "This is what you're trying to protect", 
    $key 
); 

// To decrypt: 
$plaintext = Crypto::decrypt(
    $encrypted, 
    $key 
); 

(テイラー・ホーンビー製)の上にリンクされたライブラリはAEADスキーム(関連するデータで認証暗号化)と一緒にthe only way anyone should be encrypting arbitrary data in 2016あるAuthenticated Encryptionと呼ばれるものを提供しています。

あなたも、特にその詳細や他のものを気にする必要はありませんが、場合には、あなたのコードスニペットについて興味が:それはRijndael-256, not AES

  • を使用していますECB mode
    • それは使用していますLibmcryptはブロックサイズの倍数に達するまで\0とメッセージを貼り付けます。したがって、1つ以上の\0バイトで終了する可能性があるものをすべて暗号化する場合は、メッセージの復号化時にデータを失う準備をしてください。
    • また、rtrim()は(\x20最も顕著)

    ところで、このすべては、一般的なhereherehere、およびhereに回答されている他のバイトを飲み込んします。 Stack Exchangeの指先の先端にある暗号化のベストプラクティスについての豊富な情報は、すでにif you would only search for itです。

  • 関連する問題