이전 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 디코드를 사용한 다음 다시 인코딩하십시오. 그런 다음 새로 인코딩 된 데이터를 새 테이블에 INSERT합니다. 내가 너의 질문을 이해한다면. 다른 사람들처럼 암호를 저장하려고하지 말라고 말하면 – Austin