ここでは、古いMD5ハッシュデータをAES-256データに再暗号化するためのソリューションを紹介します。 (PASSWORDデータではない)。
function doUpdates ($query = null) {
$this->load->library('encrypt'); //obsolete MD5 (PHP 7.x not supported)
$this->load->library('encryption'); // CIv3 AES-256
$dbobject=array(
'appointments' => array('completion_notes'),
'health_profiles' => array('allergies',
'pregnancy_history',
'medications',
'hospitalizations',
'social_history',
'personal_illness',
'family_illness',
'height',
'weight')
);
foreach($dbobject as $table=>$fields) {
echo "Fix table: ".$table."<br/>";
$query = $this->db->get($table)->result_array();
foreach ($query as $row) {
foreach($fields as $field){
//decrypt from legacy MD5 to AES-256
$after = $this->encryption->encrypt(
$this->encrypt->decode(
$this->encrypt->encode_from_legacy($row[$field])));
$sql_set = $field."= '".$after."',";
} //end foreach field
//remove last comma
$sql_set = substr_replace($sql_set, "", -1);
switch ($table) {
case "appointments":
$primarykey = "appointment_id";
break;
case "health_profiles":
$primarykey = "health_profile_id";
break;
} //end switch
echo "Encrypting data for primary key: ".$row[$primarykey]."<br/>";
$this->db->simple_query('update '.$table. " set ". $sql_set." where ".$primarykey." = '".$row[$primarykey]."'");
} // end for each row
} //end foreach table
} // end createUpdates
} //端recryptコントローラ
SHA1は、元の入力**回収することができない、一方向ハッシュ関数です。 AES-256は元の入力**を回復できる回復可能な暗号化です。 – zaph
**パスワードを暗号化しない**、攻撃者がDBを取得したときにも暗号化キーを取得します。約100msの間、ランダムな塩でHMACを繰り返し、塩をハッシュで保存します。 ** 'password_hash'、' PBKDF2'、 'Bcrypt'などの関数を使用してください。要点は、攻撃者が無差別にパスワードを見つけるのに多くの時間を費やすことです。 PHPでは 'password_hash'と' password_verify'が間違いなく最適な解決策です。 – zaph
あなたは変換するレコードを '選択 'しなければならないでしょう。 PHPデコードしてから再エンコードしてください。新しくエンコードされたデータを新しいテーブルに挿入します。私はあなたの質問を理解する場合。他のみんなが言ったように、パスワードを保存するために自分で試してはいけないと言っています – Austin