> 백엔드 개발 > Golang > Go에서 CRYPT_BLOWFISH에 대한 PHP의 crypt() 함수 동등성을 달성하는 방법은 무엇입니까?

Go에서 CRYPT_BLOWFISH에 대한 PHP의 crypt() 함수 동등성을 달성하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-10-27 15:38:29
원래의
996명이 탐색했습니다.

 How to Achieve PHP's crypt() Function Equivalence for CRYPT_BLOWFISH in Go?

Go에서 동일한 PHP crypt() 함수

질문:

Go 함수를 어떻게 모방하도록 만들 수 있나요? 특정 입력 문자열에 대한 PHP의 crypt() 함수 동작. 여기서 CRYPT_BLOWFISH 평가를 포함하는 PHP의 crypt() 평가 결과는 true입니까?

시도 및 예상 결과:

시도는 이를 달성하기 위해 만들어졌지만 성공하지 못했습니다.

  • 1번 시도:
    github.com/nyarla/go-crypt 모듈을 사용한 결과는 거짓이었습니다.
  • 시도 2:
    C interop을 사용하여 사용자 정의 암호화 함수를 생성해도 false가 발생했습니다.
  • 시도 3:
    또 다른 Go 모듈 시도했지만 CRYPT_BLOWFISH에 대한 지원이 부족했습니다.

Go crypt() 함수가 "enter-new-password" 및 "$2a$09$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj 문자열을 올바르게 평가하는 것이 원하는 결과입니다. .8jgmtzZP2"를 true로 설정합니다(예: PHP의 crypt()).

해결책:

Go에서 해당하는 정확한 PHP crypt()를 찾을 수 없지만 대안 솔루션이 구현되었습니다.

<code class="go">import "golang.org/x/crypto/bcrypt"

check := bcrypt.CompareHashAndPassword([]byte("a$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2"), []byte("enter-new-password"))

if check == nil {
    fmt.Println("Passwords match")
} else {
    fmt.Println("Passwords don't match")
}</code>
로그인 후 복사

이 접근 방식은 golang.org/x/crypto/bcrypt 모듈을 활용하여 제공된 비밀번호와 저장된 해시 값을 비교합니다. CompareHashAndPassword() 함수는 비밀번호가 일치하면 nil을 반환하고 그렇지 않으면 오류를 반환합니다.

추가 참고 사항:

PHP의 crypt 함수는 여러 해싱 알고리즘을 제공한다는 점에 유의하는 것이 중요합니다. sha256, sha512 및 복어를 포함합니다. Go에서는 특정 알고리즘을 처리하기 위해 다양한 모듈이 필요한 경우가 많습니다. 이 경우 PHP 예제에 사용된 복어 유형 해싱은 시도된 Go 모듈에서 기본적으로 지원되지 않습니다. 따라서 대신 bcrypt 모듈이 사용되었습니다.

위 내용은 Go에서 CRYPT_BLOWFISH에 대한 PHP의 crypt() 함수 동등성을 달성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿