SHA1 vs md5 vs SHA256 : PHP 로그인에 사용할 수있는 것은 무엇입니까?


133

PHP 로그인을 만들고 있는데 다른 stackoverflow 기사에서 읽은 SHA1 또는 Md5 또는 SHA256을 사용할지 결정하려고합니다. 다른 것보다 더 안전한 것이 있습니까? SHA1 / 256의 경우 여전히 소금을 사용합니까?

또한 이것은 암호를 mysql에서 해시로 저장하는 안전한 방법입니까?

function createSalt()
{
    $string = md5(uniqid(rand(), true));
    return substr($string, 0, 3);
}

$salt = createSalt();

$hash = sha1($salt . $hash);


이 답변을 참조 하고 암호 해싱에 대한 섹션을 읽으십시오.
Ja͢ck

답변:


110

둘 다. 을 사용해야합니다 bcrypt. 언급 한 해시는 하드웨어에서 빠르고 쉽게 최적화되어 있으므로 크래킹시 동일한 품질을 공유합니다. 다른 선택이 없다면 적어도 긴 소금을 사용하고 여러 번 다시 해시하십시오.

PHP 5.5 이상에서 bcrypt 사용

PHP 5.5는 패스워드 해싱을위한 새로운 기능을 제공합니다 . 이것은 최신 웹 응용 프로그램의 암호 저장소에 권장되는 방법입니다.

// Creating a hash
$hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);
// If you omit the ['cost' => 12] part, it will default to 10

// Verifying the password against the stored hash  
if (password_verify($password, $hash)) {
    // Success! Log the user in here.
}

이전 버전의 PHP 사용하는 경우 실제로 업그레이드해야 하지만 그렇게 할 때까지 password_compat 를 사용 하여이 API를 노출 할 수 있습니다 .

또한 password_hash()소금을 만들어주세요. CSPRNG를 사용합니다 .

bcrypt의 두 가지 경고

  1. Bcrypt는 72 자보다 긴 암호를 자동으로 자릅니다.
  2. Bcrypt는 NUL문자 다음에 잘립니다 .

( 여기에 두 가지 경고에 대한 개념 증명 )

bcrypt를 통해 비밀번호를 실행하기 전에 비밀번호사전 해싱하여 첫 번째 경고를 해결하려는 유혹을받을 수 있지만, 그렇게하면 애플리케이션이 두 번째 비밀번호로 먼저 실행될 수 있습니다.

자체 스키마를 작성하는 대신 보안 전문가가 작성 및 / 또는 평가 한 기존 라이브러리를 사용하십시오.

TL; DR - bcrypt를 사용하십시오 .


1
또한, 나는 이것에 매우 익숙합니다 : sha1, sha256 및 md5는 당신이 말하는 모든 '해시'입니까?
Tony Stark

3
예. SHA1, SHA256 및 MD5 및 속도에 최적화 된 일련의 다른 해시를 말합니다. 암호 보안 속도에 최적화 된 해시를 사용하고 싶지 않습니다. 이유를 설명하는 좋은 기사가 많이 있으며 특히이 기사를 좋아합니다. chargen.matasano.com/chargen/2007/9/7/…
Johannes Gorset

4
PHP 5.3부터 "crypt"기능에 포함되어 있습니다. 당신이 이전 버전을 가지고 있다면, 나는 다음으로 가장 좋은 것을 위해 "phpass"프레임 워크를 조사 할 것이다.
Johannes Gorset 2019

3
@Stanislav Palatnik SHA512는 좋은 대안입니다. 나를 잘못 이해하지 마라. 나는 확장되고 소금에 절인 SHA512 해시가 안전하지 않다고 말하지 않습니다. 안전합니다. 그럼에도 불구하고 bcrypt가 안전 하다는 사실이 남아 있으므로 사용하지 않을 이유가 없습니다.
Johannes Gorset

10
@Cypher : bcrypt크랙을 느리게 만들기 위해 느리게 설계되었습니다.
요하네스 Gorset

23

md5 또는 sha256 또는 속도에 최적화 된 해시를 사용하는 것은 완벽하게 훌륭하며 다른 사용자가 반박 할 수있는 소리가 매우 궁금합니다. 여기 내 이유가 있습니다

  1. 사용자가 신, 사랑, 전쟁, 평화와 같은 약한 암호를 사용하도록 허용하면 암호화에 관계없이 사용자가 여전히 해시가 아닌 암호를 입력 할 수있게 되며이 암호는 종종 먼저 사용되므로 계속 되지 않습니다 . 암호화와 관련이 있습니다.

  2. SSL을 사용하지 않거나 인증서가없는 경우 트래픽을 수신하는 공격자는 비밀번호를 가져올 수 있으며, 자바 스크립트 등으로 암호화하려는 시도는 클라이언트 측이며 쉽게 해독하고 극복 할 수 있습니다. 다시 말하지만 이것은 서버 측의 데이터 암호화와 관련 이 없습니다 .

  3. 무차별 대입 공격은 취약한 암호를 사용하며, 로그인 제한이 3 이상 또는 조금 이상인 경우 사용자가 데이터를 입력 할 수 있도록 허용하므로 문제는 다시 데이터 암호화와 관련이 없습니다 .

  4. 데이터베이스가 손상되면 해킹 기술을 포함하여 아무리 비밀리에 상관없이 모든 것이 손상되었을 가능성이 큽니다. 다시 말하면 불만족스러운 직원 XSS 공격이나 SQL 삽입 또는 암호 암호화와 관련이없는 다른 공격 일 수 있습니다.

나는 당신이 여전히 암호화해야한다고 생각하지만 암호화가 볼 수있는 유일한 방법은 이미 데이터베이스에 액세스하거나 데이터베이스에 액세스 한 사람들이 비밀번호를 크게 읽지 못하게하는 것입니다. 데이터베이스에서 인증되지 않은 사람이라면 걱정할 큰 문제가 있습니다. 암호화 된 암호가 신용 카드 번호를 포함한 모든 것을 보호한다고 생각했기 때문에 Sony가 가져갔습니다.

데이터베이스에서 복잡한 암호 암호화를 볼 수있는 유일한 장점은 데이터베이스를 액세스하는 직원이나 다른 사람들이 암호를 읽지 못하도록 지연시키는 것입니다. 따라서 작은 프로젝트이거나 서버 측의 보안에 대해 크게 걱정할 필요가없는 경우 대신 클라이언트가 SQL 주입, XSS 공격 또는 기타 다양한 방법으로 서버에 보낼 수있는 것을 보호하는 것에 대해 더 걱정할 것입니다 손상 될 수 있습니다. 누군가 동의하지 않으면 슈퍼 암호화 된 암호가 클라이언트 측에서 반드시 필요한 방법을 읽기를 기대합니다.

사람들이 암호화 된 암호로 인해 암호가 손상 될 염려가없고 웹 사이트 보안에 대해 걱정하지 않아도된다는 사실을 너무 자주 생각하기 때문입니다.


1
잘 언급했다. 사이버 보안은 해시 기술보다 우선해야하며 데이터를 저장할뿐만 아니라 서버 방어를 준비합니다.
CᴴᴀZ

14
이것은 실제로 잘못된 정보입니다. 물론 데이터베이스에서 암호를 안전하게 해싱해도 응용 프로그램 수준이나 데이터베이스 수준의 보안이 향상되지는 않습니다. 보안을위한 것은 아닙니다. 두 가지 이유로 데이터베이스의 사용자 비밀번호를 안전하게 해시하려고합니다. 먼저 고객이 다른 사이트에서 사용하거나 사용하지 않을 수있는 비밀번호로 사용자를 신뢰하고 있으므로 DB가 손상된 경우에도 비밀번호를 복구 할 수 없는지 확인하려는 경우, 둘째, 보안이 발생한 경우 책임을 제거하려는 경우 위반. 소송에 대해서는 알지 못하지만 암호가 유출되면 회사가 정말 나빠 보입니다.
James McMahon

6
이것은 나쁜 조언입니다. 누군가가 데이터베이스를 훔쳐서 해시 된 모든 암호를 얻는 경우에도 데이터베이스의 다른 부분을 손상시킨 경우에도 암호를 해독하여 로그온하는 것을 방지하는 것이 중요 할 수 있습니다. (예를 들어 뱅킹 웹 사이트를 생각하십시오.) 속도 최적화 알고리즘을 통해 공격자는 일치하는 것을 찾을 때까지 많은 후보를 도난 된 해시에 대해 테스트 할 수 있습니다. bcrypt 및 scrypt와 같은 알고리즘은 사용하는 알고리즘을 알고 있더라도 후보를 해시에 대해 테스트하는 데 느리고 비용이 많이 듭니다. 따라서 누군가 해시를 훔치는 경우 더 나은 보호 기능을 제공합니다.
Richard

6
"데이터베이스가 손상되면 해킹 기술을 포함하여 아무리 비밀리에 관계없이 모든 것이 손상되었을 가능성이 높습니다." 그건 bcrypt 매우 중요하다. bcrypt를 사용하면 누군가 해시를 가지고 있는지는 중요하지 않습니다. SHA1 / MD5와 같은 빠른 해싱 알고리즘을 사용합니다.
ceejayoz

나는 당신 중 일부가 누락 된 점은 다른 모든 데이터가 일반 텍스트 일 ​​때 암호가 1000 % 안전하다면 중요하지 않다는 것입니다. 예를 들어, 전체 데이터베이스가 손상된 경우 해커는 이제 모든 일반 텍스트 신용 카드 번호를 갖습니다. 그렇습니다. 많은 사람들이 서로 다른 웹 사이트에서 동일한 암호를 사용하고 있지만 이미 그런 식으로하지 말라고 오심을 들었으므로 더 이상 우리의 문제는 아닙니다. 데이터베이스 자체에 민감한 정보가 포함되어 있고 그 정보가 훼손 될 경우 필요한만큼 강력하게 전체 데이터베이스를 암호화하십시오.
UncaAlby

15

Johannes Gorset이 지적한 것처럼 Matasano Security의 Thomas Ptacek의 게시물은MD5, SHA1, SHA256 및 SHA512와 같은 단순한 범용 해싱 기능이 암호 해시 선택이 좋지 않은지 설명 합니다 .

왜? 너무 빠르므로 최신 컴퓨터에서 코어 당 초당 1,000,000 개의 MD5 해시를 계산할 수 있으므로 사람들이 사용하는 대부분의 암호에 대해 무차별 대입이 가능합니다. 그리고 그것은 GPU 기반 크래킹 서버 클러스터보다 훨씬 적습니다!

키 스트레칭없이 소금을 칠하는 것은 무지개 테이블을 미리 계산할 수 없다는 것을 의미하기 때문에 특정 소금에 맞게 임시 테이블을 만들어야합니다. 그러나 실제로 그렇게 어렵게 만들지는 않습니다.

사용자 @Will의 말 :

모두가 인터넷을 통해 해킹 당할 수있는 것처럼 이에 대해 이야기하고 있습니다. 이미 언급했듯이 시도를 제한하면 인터넷을 통해 암호를 해독 할 수 없으며 해시와 관련이 없습니다.

그들은 필요하지 않습니다. 분명히 LinkedIn의 경우 공통 SQL 주입 취약점 을 사용하여 로그인 DB 테이블을 가져와 오프라인에서 수백만 개의 암호를 해독했습니다.

그런 다음 그는 오프라인 공격 시나리오로 돌아갑니다.

전체 데이터베이스가 손상되면 해커가 md5 해시에 대해 초당 1 억 건의 비밀번호 시도를 수행 할 수 있습니다. SHA512는 약 10,000 배 느립니다.

아니요, SHA512 는 MD5보다 10000 배 느리지 않습니다. 약 두 배만 걸립니다. 반면에 Crypt / SHA512 는 BCrypt와 마찬가지로 키 스트레칭을 수행 하여 임의의 소금이 내장 된 매우 다른 해시를 생성하며 계산하는 데 500 ~ 999999 시간이 걸립니다. (신축 조정이 가능합니다).

SHA512 => aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
Crypt/SHA512 => $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21

따라서 PHP의 선택은 Crypt / Blowfish (BCrypt), Crypt / SHA256 또는 Crypt / SHA512입니다. 또는 적어도 Crypt / MD5 (PHK). www.php.net/manual/en/function.crypt.php 참조


간단한 암호 해싱은 괜찮습니다. 서버를 안전하게 유지하는 것은 방화벽에 달려 있습니다. "방화벽"이란 무차별 대입을 차단 / 느리게하는 반응 형 방화벽을 의미합니다. 콘테스트는 무의미합니다. .. "해커가 침입하여 모든 것을 가지고 있다면"(페이스 데스크) – 해커가 서버에 들어간 경우 끝났습니다. 암호는 너무 단순하거나 소프트웨어 개발자가 사이버 범죄자처럼 생각하기에는 너무 게으 르기 때문에 대부분 해독됩니다.

@argon 다시 읽어주십시오. 비밀번호 해싱의 전체 목적은 로그인 DB가 손상 되었을 때 (그리고 언젠가는) 모든 사용자의 비밀번호를 즉시 유출하지 않도록하는 것입니다.이 비밀번호는 다른 사이트의 사용자가 가장 자주 재사용합니다. 입력 후 지연됩니다. 그리고 "서버에 도착하면 게임이 끝났습니다"라는 말은 논쟁의 여지가 있습니다. 내부 서버. 해커가 가장 많이 사용하는 취약점은 SQL 삽입 (Linkedin 사례 참조)이며 해시를 무차별 처리합니다. 그래서 소금과 스트레칭이 필요합니다.
LexLythius

보안 요구 사항이 너무 강하면 다른 곳에 암호를 저장하는 것이 좋습니다. "if / when"에 대한 데이터 (및 소스 코드)를 보호하는 방법은 여러 가지가 있습니다.하지만 "gazillion bits"까지 해싱 암호는 다음과 같이 안전합니다. 암호 작성자 / 게스트 시스템 , 데이터 전송 및 서버 하드웨어 서비스를 제공하는 사람. .. 그 말 : 나는 해싱이 쓸모 없다는 말은 아니지만, 솔루션이 더 복잡한 해시라면 가까운 미래에 양자 컴퓨터와 관련하여 작동하지 않을 것이라고 두려워합니다.

재귀 해싱은 해킹 시도에 작업 / 비용을 추가합니다. 반복이 많을수록 크랙하기가 더 어려워 SHA256과 같은 빠른 해시도 사용할 수 있습니다. 반복은 임의적이어야하며 공개 할 수 있습니다.password_hash()해시 자체의 비용을 보여줍니다.
Victor Stoddard 21

@VictorStoddard 그렇습니다. 자신 만의 해싱 방식을 적용하고 조정 가능한 키 스트레칭을 제공 할 수 있습니다 . 그런데 왜 당신은 것입니다 원하는 이미 사용하여 기존의 대신 그렇게 전문가가 만든 정확히 이러한 목적을 위해 사용할 것을 훨씬 더 철저하게 시시콜콜 따지는 알고리즘?
LexLythius

13

사용하십시오 SHA256. SHA512빠른 해시에 이상적 이므로 완벽 하지는 않지만 옵션 중에서 확실한 선택입니다. 해싱 기술에 따라 보안 강화를 위해 해시를 염두에 두어야합니다.

추가로 FRKT, 누군가가 소금에 절인 SHA256 해시를 쉽게 해독 할 수있는 곳을 보여 주시겠습니까? 나는 이것을 정말로보고 싶어한다.

중요 편집 :

앞으로는 bcrypt강화 된 해시로 사용하십시오 . 자세한 내용은 여기를 참조하십시오 .


솔팅 편집 :

난수 또는 임의 바이트 스트림 등을 사용하십시오. 데이터베이스에서 레코드의 고유 필드를 소금으로 사용할 수도 있습니다. 이런 식으로 소금은 사용자마다 다릅니다.


1
그러나 속도에 최적화되어있어 무차별 대입 해킹이 가능합니다.
arbales

6
사실은 암호를 보호하는 것입니다. 솔트를 사용하여 해시를 사용한 다음 웹 사이트에 3 회 시도 제한을 추가하면 해커의 시도 속도가 현저히 느려집니다 (무차별 한 포스). 순수한 암호화를 사용하면 키를 보호하는 또 다른 문제가 있습니다. 키가 발견되면 전체 데이터베이스가 손상됩니다 (소금이 추가되지 않은 경우). 그러나 해시, 시스템에서 원래 암호를 절대 얻지 못하므로 암호가 어떻게 유지되어야합니다.
Kyle Rosendo 8:10에

1
언급 한 바와 같이 MD 및 SHA 시리즈의 문제점은 속도에 최적화되어 있다는 것입니다. 컴퓨팅이 발전함에 따라 이러한 특성의 해시가 점점 안전하지 않게되는 것은 불가피합니다.
Johannes Gorset

1
컴퓨팅이 발전함에 따라 모든 것이 점점 더 나 빠지고 안전하지 않게됩니다. SHA512 등이 해킹 될 때 사용할 수있는 더 안전한 알고리즘이 있습니다. 이것은 어떤 경우에도 컴퓨팅의 특성입니다.
Kyle Rosendo

1
PHP에서 소금을 만드는 좋은 방법은 무엇입니까? 예제 코드가 있습니까? 난 그냥 '기린'과 같은 선택 안 상상
토니 스타크

4

사람들이 누락 된 것처럼 보이는 것은 해커가 데이터베이스에 액세스 할 수 있다면 아마도 암호를 해시하는 PHP 파일에 액세스 할 수 있으며 모든 성공적인 사용자 이름 암호 콤보를 보내도록 수정할 수 있다는 것입니다. 웹 디렉토리에 액세스 할 수없는 경우 항상 비밀번호 해시를 선택하여 데이터베이스에 쓸 수 있습니다. 다시 말해 해시 알고리즘은 시스템 보안만큼 중요하지 않으며, SSL을 사용하지 않는 경우 로그인 시도를 제한하면 공격자가 정보를 얻기 위해 연결을 수신 할 수 있습니다. 계산에 오랜 시간이 걸리지 않는 한 (자신의 목적으로) 사용자 별 소금 이 포함 된 SHA-256 또는 SHA-512 이면 충분합니다.

추가 보안 조치로 스크립트 (bash, batch, python 등) 또는 프로그램을 설정하고 불명확 한 이름을 지정하고 login.php가 변경되었는지 (날짜 / 시간 스탬프 확인) 확인하고 이메일을 보내도록합니다 있다면. 또한 관리자 권한으로 로그인 할 때 모든 시도를 기록하고 데이터베이스에 로그인하여 로그를 이메일로 보내려는 모든 실패한 시도를 기록해야합니다.


"사람들이 누락 된 것으로 보이는 것은 해커가 데이터베이스에 액세스 할 수 있다면 아마도 암호를 해시하는 PHP 파일에 액세스 할 수도 있다는 것입니다."이것은 사실이 아닙니다. 가장 일반적인 취약점 중 하나는 SQL 주입으로, 데이터베이스에 대한 읽기 / 쓰기 기능은 제공하지만 PHP 코드에는 액세스 할 수 없습니다.
ceejayoz

코드에 액세스 할 수 있으면 사용자가 보내는 모든 비밀번호를 일반 텍스트로 수정하고 저장할 수 있습니다. 따라서 코드가 손상되면 GAME OVER입니다.
magallanes

3

모두가 인터넷을 통해 해킹 당할 수있는 것처럼 이에 대해 이야기하고 있습니다. 이미 언급했듯이 시도를 제한하면 인터넷을 통해 암호를 해독 할 수 없으며 해시와 관련이 없습니다.

소금은 필수이지만 복잡성이나 여러 소금은 중요하지 않습니다. 소금 만 있으면 공격자가 미리 만든 레인보우 테이블을 사용하지 못하게됩니다. 사용자 당 고유 한 소금은 공격자가 전체 사용자 기반에 사용할 새 레인보우 테이블을 만들지 못하게합니다.

전체 데이터베이스가 손상되면 해커가 md5 해시에 대해 초당 1 억 건의 비밀번호 시도를 수행 할 수 있습니다. SHA512는 약 10,000 배 느립니다. 오늘날의 강력한 암호는 md5로 무차별 처리하는 데 100 년이 걸리고 SHA512에서는 10,000 배가 걸립니다. 솔트는 항상 알려 져야만하는 무차별 대입을 멈추지 않습니다. 공격자가 데이터베이스를 다운로드 한 경우 어쩌면 시스템에있을 수도 있습니다.


1

충돌 문제로 인해 MD5가 잘못되었습니다. 두 개의 다른 암호로 동일한 md-5를 생성 할 수 있습니다.

Sha-1은 이것을 위해 충분히 안전 할 것입니다. 소금에 절인 sha-1 버전의 비밀번호를 저장하는 이유는 사용자가 다른 사람의 서버와 함께 사용할 수 있도록 사용자의 비밀번호를 파일에 보관하지 않기 때문입니다. 그렇지 않으면 어떤 차이가 있습니까?

해커가 암호화되지 않은 전체 데이터베이스를 어떤 방식으로 도용하는 경우 해시 된 소금에 절인 암호로 수행 할 수있는 유일한 방법은 향후 로그온을 위해 사용자를 가장하지 못하게하는 것입니다. 해커에는 이미 데이터가 있습니다.

사용자가 입력 한 것이 일반 암호 인 경우 침입자는 해시 값을 갖는 것이 무엇입니까?

그리고 미래 기술을 가진 해커가 무차별 대입 공격을 위해 초당 백만 개의 sha-1 키를 생성 할 수 있다고해도 해커가 키를 테스트하기 위해 서버에서 초당 백만 개의 로그온을 처리합니까? 해커가 일반 로그온과 같은 암호 대신 소금에 절인 sha-1로 로그온하도록 허용하는 경우입니다.

가장 좋은 방법은 잘못된 로그온 시도를 적당한 수 (예 : 25)로 제한 한 다음 사용자를 1 ~ 2 분 동안 시간 초과하는 것입니다. 그리고 24 시간 동안 누적 불량 로그온 시도가 250 회에 도달하면 계정 액세스를 종료하고 소유자에게 이메일을 보내십시오.


더 약한 암호화를 사용하더라도 실제로는 초당 1 백만 회 이상 무차별 공격을 할 수있는 시스템이 없습니다.
magallanes

1
세 번의 로그인 실패로 잠겨 있습니다. 기간, 이야기의 끝. 해커가 먼저 "password", "pa $$ word"및 "passw0rd"를 시도하면 "1234"와 같은 매우 어리석은 암호도 안전합니다 (잠금!). 사용자가 액세스 권한을 다시 얻는 방법은 이제 보안의 핵심이되며 수행 할 작업은 사용자 규모에 따라 다릅니다. 200 명의 사용자? 전화를 걸어 도움을 청하십시오.
UncaAlby

이 답변이 다른 사람에게는 이해가되지 않습니까, 아니면 저입니까?
와일드 카드


1

argon2i를 사용하십시오 . argon2 암호 해시 기능은 암호 해싱 경쟁을 수상했다.

argon2 를 사용할 수없는 경우 다른 합리적인 선택 은 scrypt , bcryptPBKDF2 입니다. Wikipedia에는 ​​다음 기능에 대한 페이지가 있습니다.

MD5, SHA1 및 SHA256은 암호 해싱 기능이 아니라 메시지 요약입니다. 그들은이 목적에 적합하지 않습니다.

MD5에서 SHA1 또는 SHA512로 전환해도 구성의 보안이 크게 향상되지는 않습니다. SHA256 또는 SHA512 해시 계산은 매우 빠릅니다. 일반적인 하드웨어를 가진 공격자는 여전히 초당 수천만 (단일 CPU) 또는 수십억 (단일 GPU) 해시를 시도 할 수 있습니다. 좋은 암호 해싱 기능에는 사전 공격 속도를 늦추는 작업 요소가 포함됩니다.

다음은 PHP 프로그래머를위한 제안입니다. PHP FAQ 를 읽고 password_hash () 를 사용하십시오 .


0

다음으로 가정하자 : 해커는 사용자와 비밀번호 (암호화)를 포함하여 데이터베이스를 훔칩니다. 그리고 해커들은 자신이 알고있는 암호로 가짜 계정을 만들었습니다.

MD5는 짧고 대중적이며 실제로 암호가없는 모든 해시 생성에는 사전 공격이 약하기 때문에 약합니다. 그러나..

따라서 여전히 SALT와 함께 MD5를 사용하고 있다고 가정 해 봅시다. 해커는 SALT를 모르지만 특정 사용자의 비밀번호를 알고 있습니다. 그래서 그들은 테스트 할 수 있습니다 : ????? 12345 여기서 12345는 알고있는 암호와 ????? 소금입니다. 해커는 조만간 SALT를 추측 할 수 있습니다.

그러나 MD5 + SALT를 사용하고 MD5를 적용한 경우 정보를 복구 할 방법이 없습니다. 그러나 반복합니다. MD5는 여전히 짧습니다.

예를 들어, 비밀번호가 12345라고 가정 해 봅시다. SALT는 BILLCLINTON입니다.

md5 : 827ccb0eea8a706c4c34a16891f84e7b

해시가있는 md5 : 56adb0f19ac0fb50194c312d49b15378

md5에 대한 해시가있는 mD5 : 28a03c0bc950decdd9ee362907d1798a 나는 온라인 서비스를 사용하려고 시도했지만 그것을 깨뜨릴 수있는 것을 찾지 못했습니다. 그리고 그것의 유일한 MD5! (오늘날처럼 md5를 온라인으로 생성했기 때문에 깨질 수 있습니다)

과잉 죽기를 원한다면 SHA256으로 소금을 두 번 바르면 충분합니다.

tldr MD5 (HASH + MD5 (password)) = 괜찮지 만 짧습니다. SHA256이면 충분합니다.


소금과 함께 MD5를 사용하는 문제는 컴퓨터가 빠른 속도로 하나의 암호에 대해 무차별 대입 공격을 할 수 있다는 것입니다. shylor.com/2015/09/14/php-5-5-secure-password-hashing
Shylor

0

md5 암호화는 코드를 전환해야하고 이미 해독 되었기 때문에 최악의 방법 중 하나입니다. SHA256을 추천합니다. 나는 조금 더 프로그래밍하고 좋은 경험을 가지고있다. 아래는 또한 암호화입니다.

password_hash() example using Argon2i

<?php
echo 'Argon2i hash: ' . password_hash('rasmuslerdorf', PASSWORD_ARGON2I);
?>
The above example will output something similar to:

Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.