您在Golang 中產生HOTP 的初始程式碼不同於它的Java 對應項,導致產生的位元組陣列有差異。根本問題源自於 Java 和 Golang 中不同的位元組表示。 Java的byte型別是有符號的,取值範圍是-128到127,而在Golang中,byte是uint8的別名,取值範圍是0到255。
為了實現一致性,對負值進行歸一化至關重要Java 位元組值增加 256。此調整對齊 Java 和 Golang 中產生的位元組數組。
Java 和 Golang 程式碼之間的另一個區別是編碼方法。 Java傳回十六進位編碼的結果,而Golang回傳Base64編碼的結果。為了匹配 Java 輸出,您需要將 Golang 中的 base64 編碼替換為十六進位編碼。
出於偵錯目的,您可以在 Java 中使用以下命令顯示有符號位元組值表達式「byteValue & 0xff」。這會將位元組值轉換為 int,將位元組的 8 位元表示為結果 int 的最低有效位元。
在 Go 中,您可以將位元組轉換為 int8 將位元組顯示為有符號值。例如,「fmt.Print(int8(b))」將列印一個位元組作為其有符號等價物。
了解 Java 和 Golang 之間位元組表示和編碼的差異可以Golang 中準確的 HOTP 實現。透過解決這些差異,您可以在 Go 應用程式中產生有效的 HOTP 程式碼。
以上是如何確保 Java 和 Golang 實作之間 HOTP 產生的一致性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!