首頁 >後端開發 >Golang >如何確保 Java 和 Golang 實作之間 HOTP 產生的一致性?

如何確保 Java 和 Golang 實作之間 HOTP 產生的一致性?

Linda Hamilton
Linda Hamilton原創
2024-12-31 10:13:12358瀏覽

How Can I Ensure Consistent HOTP Generation Between Java and Golang Implementations?

RFC-4226 HOTP 實作中Java 和Golang 的對比

在Golang 中產生有效的HOTP

您在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn