현재 위치: > 최신 기사 목록> 비밀번호 암호화 알고리즘을 교체 할 때 Password_Needs_RHOSH로 원활한 전환을 달성하는 방법?

비밀번호 암호화 알고리즘을 교체 할 때 Password_Needs_RHOSH로 원활한 전환을 달성하는 방법?

gitbox 2025-09-18

현대적인 웹 개발에서는 사용자 암호의 보안을 보장하는 것이 중요합니다. 기술의 발전으로 새로운 암호화 알고리즘이 계속 나타나고 오래된 알고리즘은 더 이상 안전하지 않거나 시간이 지남에 따라 현재 요구에 더 이상 적합하지 않을 수 있습니다. 따라서 개발자는 종종 사용자 경험에 영향을 미치지 않고 비밀번호 암호화 알고리즘을 교체해야합니다. PHP는 password_needs_rehash () 함수를 제공하여 암호 암호화 알고리즘의 원활한 전환을보다 단순하고 효율적으로 만듭니다.

1. password_needs_rehash () 란 무엇입니까?

password_needs_rehash () 는 PHP의 내장 기능으로 저장된 비밀번호를 다시 연결 해야하는지 확인합니다. 이 기능은 현재 저장된 암호 해시 값이 새로운 암호 암호화 알고리즘과 일치하는지 또는 새로운 알고리즘 요구 사항을 충족하는지 여부를 결정하는 것입니다. 일반적으로 비밀번호 암호화 알고리즘이 변경되면 개발자는이 기능을 사용하여 사용자가 암호를 수동으로 재설정 할 필요없이 사용자가 로그인 할 때 암호 해시를 자동으로 업데이트 할 수 있습니다.

함수는 다음과 같이 정의됩니다.

 <span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">password_needs_rehash</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$hash</span></span><span> , </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$algo</span></span><span> , </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$options</span></span><span> )
</span></span>

매개 변수 설명 :

  • $ 해시 : 저장된 비밀번호 해시 값.

  • $ Algo : 새로운 암호화 알고리즘 (예 : Password_Bcrypt , Password_argon2i 등).

  • $ 옵션 : 선택적 구성 옵션, 일반적으로 BCrypt와 같은 알고리즘 구성을 포함하는 배열의 비용 요소입니다.

반품 값 :

비밀번호를 다시 해쉬 해야하는 경우 true를 반환하고 다시 해쉬가 필요하지 않은 경우 False를 반환하십시오.

2. 암호 암호화 알고리즘을 변경할 때 Password_Needs_RHASH ()를 사용하는 방법은 무엇입니까?

1 단계 : 사용자가 로그인하면 비밀번호를 확인하십시오

사용자가 로그인하면 먼저 이전 암호화 알고리즘을 사용하여 사용자가 입력 한 암호를 확인합니다. 이 시점에서 저장된 비밀번호 해시를 다시 암호화 해야하는지 확인해야합니다. 필요한 경우 새 알고리즘을 사용하여 암호를 암호화하고 데이터베이스에서 해시 값을 업데이트하십시오.

2 단계 : 비밀번호를 다시 암호화 해야하는지 확인하십시오.

사용자의 암호가 성공적으로 확인되면 Password_Needs_Rheash () 함수를 사용하여 현재 저장된 암호 해시가 새로운 암호화 알고리즘의 요구 사항을 충족하는지 확인할 수 있습니다. 해시 값을 다시 암호화 해야하는 경우 새 알고리즘을 사용하여 해시를 암호화하고 업데이트하십시오.

Code example:

password_bcrypt 암호화 알고리즘을 사용했다고 가정하고 이제 Password_argon2i 로 업그레이드해야합니다.

 <span><span><span class="hljs-comment">// 사용자가 입력 한 비밀번호를 가져옵니다</span></span><span>
</span><span><span class="hljs-variable">$user_input_password</span></span><span> = </span><span><span class="hljs-variable">$_POST</span></span><span>[</span><span><span class="hljs-string">'password'</span></span><span>];

</span><span><span class="hljs-comment">// 데이터베이스에서 저장된 해시 값을 얻으십시오</span></span><span>
</span><span><span class="hljs-variable">$stored_hash</span></span><span> = </span><span><span class="hljs-title function_ invoke__">getUserHashFromDatabase</span></span><span>(</span><span><span class="hljs-variable">$user_id</span></span><span>);

</span><span><span class="hljs-comment">// 이전 암호화 알고리즘을 사용하여 암호를 확인하십시오</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">password_verify</span></span><span>(</span><span><span class="hljs-variable">$user_input_password</span></span><span>, </span><span><span class="hljs-variable">$stored_hash</span></span><span>)) {
    
    </span><span><span class="hljs-comment">// 해시 값을 다시 암호화 해야하는 경우</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">password_needs_rehash</span></span><span>(</span><span><span class="hljs-variable">$stored_hash</span></span><span>, PASSWORD_ARGON2I, [</span><span><span class="hljs-string">'memory_cost'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span> &lt;&lt; </span><span><span class="hljs-number">17</span></span><span>, </span><span><span class="hljs-string">'time_cost'</span></span><span> =&gt; </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-string">'threads'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>])) {
        
        </span><span><span class="hljs-comment">// 새로운 암호화 알고리즘을 사용하여 암호를 암호화합니다</span></span><span>
        </span><span><span class="hljs-variable">$new_hash</span></span><span> = </span><span><span class="hljs-title function_ invoke__">password_hash</span></span><span>(</span><span><span class="hljs-variable">$user_input_password</span></span><span>, PASSWORD_ARGON2I, [</span><span><span class="hljs-string">'memory_cost'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span> &lt;&lt; </span><span><span class="hljs-number">17</span></span><span>, </span><span><span class="hljs-string">'time_cost'</span></span><span> =&gt; </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-string">'threads'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>]);
        
        </span><span><span class="hljs-comment">// 데이터베이스에서 해시 값을 업데이트하십시오</span></span><span>
        </span><span><span class="hljs-title function_ invoke__">updateUserHashInDatabase</span></span><span>(</span><span><span class="hljs-variable">$user_id</span></span><span>, </span><span><span class="hljs-variable">$new_hash</span></span><span>);
    }

    </span><span><span class="hljs-comment">// 성공적으로 로그인하십시오,해당 작업을 수행하십시오</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"성공적으로 로그인하십시오!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-comment">// 오류 비밀번호</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"오류 비밀번호!"</span></span><span>;
}
</span></span>

코드 설명 :

  • password_verify () : 사용자가 입력 한 암호가 저장된 해시 값과 일치하는지 확인하는 데 사용됩니다.

  • password_needs_rehash () : 확인이 성공한 후 저장된 해시가 새로운 암호화 알고리즘의 요구 사항을 충족하는지 확인하십시오. 다시 암호화가 필요한 경우 다음 단계를 따르십시오.

  • password_hash () : 새로운 암호화 알고리즘을 사용하여 암호를 암호화하는 데 사용됩니다.

  • UpdateUserHashIndatabase () : 새 비밀번호 해시를 데이터베이스에 저장합니다.

3. 부드러운 전환의 이점

Password_Needs_Rheash ()를 사용하여 비밀번호 암호화 알고리즘을 교체 할 때 가장 큰 장점은 사용자가 적극적으로 개입 할 필요가 없으며 시스템이 로그인 할 때 비밀번호 해시 업그레이드를 자동으로 완료 할 수 있다는 것입니다.이 접근 방식은 몇 가지 중요한 이점을 가져옵니다.

  1. SEAMLESS 업그레이드 : 사용자는 한 번만 로그인하면 시스템이 비밀번호를 재설정하지 않고 비밀번호 암호화 알고리즘을 자동으로 업그레이드합니다.

  2. 보안 개선 :보다 안전한 암호화 알고리즘으로 점차 전환함으로써 시스템은 전반적인 보안을 향상시키고 오래된 알고리즘을 사용하여 발생하는 보안 취약점을 피할 수 있습니다.

  3. 강력한 호환성 : 암호화 알고리즘을 교체하는 과정에서 구 해시 값은 여전히 ​​유효하여 시스템의 역 호환성을 보장하고 등록 된 사용자에게 영향을 미치지 않습니다.

4. 요약

비밀번호 암호화 알고리즘을 교체하는 것은 보안을 향상시키는 데 필요한 조치 중 하나이지만이를 구현할 때는 사용자 경험과 시스템의 원활한 전환을 고려해야합니다. PHP가 제공하는 Password_needs_Rheash () 함수는 개발자가 사용자를 방해하지 않고 기존 알고리즘에서 새로운 알고리즘으로 비밀번호 암호화 알고리즘을 원활하게 마이그레이션하는 데 도움이 될 수 있습니다. 이러한 방식으로, 사용자의 로그인 경험이 영향을받지 않도록 시스템의 보안을 향상시킬 수 있습니다.