HOTP を生成するための Golang の最初のコードは、 Java の対応物であるため、結果として得られるバイト配列に不一致が生じます。根本的な問題は、Java と Golang の異なるバイト表現に起因します。 Java の byte 型は符号付きで、範囲は -128 ~ 127 ですが、Golang では、byte は uint8 のエイリアスで、範囲は 0 ~ 255 です。
一貫性を実現するには、負の値を正規化することが重要です。 Java バイト値に 256 を加算します。この調整により、Java で生成されたバイト配列が調整され、 Golang.
Java コードと Golang コードのもう 1 つの違いは、エンコード方法です。 Java は 16 進数でエンコードされた結果を返しますが、Golang は Base64 でエンコードされた結果を返します。 Java 出力と一致させるには、Golang の Base64 エンコーディングを 16 進エンコーディングに置き換える必要があります。
デバッグの目的で、次を使用して Java で符号付きバイト値を表示できます。式「byteValue & 0xff」。これはバイト値を int に変換し、バイトの 8 ビットを結果の int の最下位ビットとして表します。
Go では、バイトを int8 に変換することで符号付き値として表示できます。たとえば、「fmt.Print(int8(b))」は、符号付きの等価物としてバイトを出力します。
Java と Golang の間のバイト表現とエンコーディングの違いを理解すると、次のことが可能になります。 Golang での正確な HOTP 実装。これらの差異に対処することで、Go アプリケーションで有効な HOTP コードを生成できます。
以上がJava 実装と Golang 実装間で一貫した HOTP 生成を保証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。