2016-08-31 3 views
-4

백엔드가 mongodb에 데이터를 저장할 노드 js 인 하이브리드 모바일 응용 프로그램을 만들고 싶습니다. 내 서버가 제대로 작동하고 사용자 요청을 처리 할 수있는 경로를 준비했습니다.해시 된 비밀번호에서 실제 비밀번호를 검색하려면 어떻게해야합니까?

mongodb에 암호 해시를 저장하기 위해 bcrypt를 사용하고 있습니다. 암호는 올바르게 저장되지만 실제 암호를 검색 할 수 없다는 문제가 있습니다. 예를 들어 관리자가 사용자 데이터를 얻기 위해 노드 js 서버에 GET 요청을 전달하면 프런트 엔드에 해시 된 암호가 전달됩니다.

UserSchema.pre('save', function (next) { 
    var user = this; 
    if (this.isModified('password') || this.isNew) { 
     bcrypt.genSalt(10, function (err, salt) { 
      if (err) { 
       return next(err); 
      } 
      bcrypt.hash(user.password, salt, function (err, hash) { 
       if (err) { 
        return next(err); 
       } 
       user.password = hash; 
       next(); 
      }); 
     }); 
    } else { 
     return next(); 
    } 
}); 

이 어떻게 진짜 비밀 번호를 검색 할 수 있습니다하십시오

enter image description here

이 암호 해시를 저장하는 코드는 다음과 같습니다

이 프런트 엔드의 결과인가?

+4

해시 된 암호를 저장하는 요점은 원래 암호를 복원 할 수 없다는 것입니다. –

+1

비밀 번호를 검색하려고하지 마십시오, 당신은 비밀 번호를 제공하고, 이미 저장된 비밀 번호를 암호화하고 일치시킬 수 있습니다. – Aby

답변

4

수 없습니다. 이것이 암호 해싱의 목적입니다.

+0

당신의 대답을 주셔서 감사합니다, 그냥 의심의 여지가 – Taha

5

암호 해싱의 요점은 '돌이킬 수없는'암호 변형입니다. 일반 해시 인 경우 무지개 표 또는 기타 정렬 방법을 사용하여 해시 테이블을 해독 할 수 있어야합니다. 비밀번호를 해시하는 데 '소금'을 사용했다면 암호를 해독 할 확률이 훨씬 더 낮다고 생각합니다.

특히 복어의 사이퍼를 사용하는 bcrypt는 매우 강력한 해싱 알고리즘입니다.

해싱 암호가 표준이되어 웹 사이트 소유자가 실제로 일반 암호에 액세스 할 수 없도록합니다.

추가 질문 하나 : 이유가 무엇입니까?

+0

당신의 대답을 주셔서 감사합니다, 그것은 의심의 여지가 – Taha

+1

또한 Bcrypt 또한 iterates 그 작업은 상당한 시간이 걸리는 등이 중요한 포인트입니다. 그냥 해싱 암호가 있어도 소금을 사용하지 않아도 암호를 보호 할 수는 없으며 10M 개의 공통 암호 목록이 있습니다. 해시가 매우 빠르며 초당 700K SHA-256 해시를 실행할 수 있습니다. 그들을 실행하기위한 특별한 전문 프로그램. – zaph

4

수 없습니다. 의도적으로 해시 함수, 특히 암호화 해시 함수는 역변환 할 수 없으며 one-way function입니다. 디자인에 의해 암호화 해시 함수가이 주어진 입력에 대해 해시 값을 계산 빠르다

  • 다음 속성
  • 는 모든 가능한 입력 시도를 제외하고 해시 값에서 입력을 생성하는 불가능하다 입력에
  • 작은 변화는 새로운 해시 값이 이전의 해시 값과 상관 나타나도록 광범위의 해시 값을 변경한다
  • 두 개의 상이한 입력 재치 찾을 불가능하다 h 동일한 해시 값

암호 저장을 보호하는 데 중요한 요소 중 하나입니다. 예를 들어 공격자가 서버에 액세스하여 데이터베이스에서 임의의 쿼리를 실행할 수있는 경우 적절한 암호화 해시 기능을 통해 공격자가 사용자의 암호를 검색 할 수 없습니다.

출처 : Wikipedia - Cryptographic hash function.

관련 문제