> 백엔드 개발 > Golang > 내 Go ed25519 공개 키가 예상 BEP 데이터와 다른 이유는 무엇입니까?

내 Go ed25519 공개 키가 예상 BEP 데이터와 다른 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-10-31 07:23:29
원래의
1034명이 탐색했습니다.

Why Does My Go ed25519 Public Key Differ From the Expected BEP Data?

ed25519 키에 대한 공개 키 일치 BEP 생성

문제:
Go crypto/ed25519 패키지 사용 , 생성된 공개 키가 BEP 데이터를 사용한 테스트 사례에서 제공된 예상 키와 다릅니다.

원인:
ed25519에는 다양한 개인 키 형식이 존재합니다. BEP 데이터는 64바이트 해시 개인 키를 사용하는 반면 Go 패키지는 32바이트 해시 개인 키(32바이트 시드가 앞에 붙음)를 사용합니다.

해결책:
BEP 개인 키를 Go 형식으로 변환하는 것은 불가능하지만 BEP에 사용되는 해시된 개인 키를 처리하기 위해 Go 라이브러리의 수정된 버전을 만들 수 있습니다.

코드 수정:

수정된 코드에는 다음 함수가 포함되어 있습니다.

  1. getPublicKey: 64바이트 해시 개인 키에서 공개 키를 생성합니다.
  2. sign: 해시된 개인 키, 공개 키 및 메시지를 사용하여 서명합니다.
<code class="go">func getPublicKey(privateKey []byte) []byte {
    // ... (extraction of 32-byte hash from 64-byte hashed private key and publicKey generation) ...
}

func sign(privateKey, publicKey, message []byte) []byte {
    // ... (extraction of 32-byte hash from 64-byte hashed private key and signature computation) ...
}</code>
로그인 후 복사

사용법:

이 수정된 코드를 사용하면 테스트 케이스를 실행할 수 있습니다. , 생성된 공개 키와 서명이 예상 BEP 데이터와 일치함을 보여줍니다.

<code class="go">// Using the modified code...

fmt.Printf("Calculated key: %x\n", publicKey)
fmt.Printf("Expected key:   %s\n", expectedPublicKey)
keyMatches := expectedPublicKey == hex.EncodeToString(publicKey)
fmt.Printf("Public key matches expected: %v\n", keyMatches)

// Similarly, check for signature match</code>
로그인 후 복사

위 내용은 내 Go ed25519 공개 키가 예상 BEP 데이터와 다른 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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