Rumah >pembangunan bahagian belakang >Golang >Mengapakah Pelaksanaan Java dan Golang HOTP (RFC-4226) Menghasilkan Keputusan yang Berbeza?
Pelaksanaan HOTP (RFC-4226) di Jawa lwn. Golang
Apabila melaksanakan HOTP (RFC-4226) di Golang, percanggahan mungkin timbul dalam menjana HOTP yang sah berbanding Java. Untuk menangani isu ini, adalah penting untuk memahami perbezaan bernuansa dalam pengendalian bait antara Java dan Golang.
Perwakilan Byte
Di Java, jenis bait ditandatangani, antara -128 hingga 127. Walau bagaimanapun, di Golang, jenis bait ialah alias untuk uint8, menghasilkan julat 0 hingga 255. Perbezaan ini penting dalam memahami perbandingan tatasusunan bait.
Pelaksanaan Java
Coretan kod Java menggunakan ByteBuffer.allocate(8).putLong(counter). array() untuk menjana tatasusunan bait untuk nilai pembilang. Khususnya, kaedah putLong menukarkan pembilang kepada integer panjang 8-bait dan menyimpannya dalam tatasusunan bait.
Pelaksanaan Golang
Dalam Golang, kod menggunakan binari .BigEndian.PutUint64(bs, pembilang) untuk menjana tatasusunan bait bagi nilai pembilang. Kaedah PutUint64 menukarkan pembilang kepada integer tidak bertanda 64-bit dan menyimpannya dalam tatasusunan bait dalam susunan besar-endian.
Percanggahan dalam Nilai Bait
Perbezaan antara kedua-dua kaedah ini berpunca daripada sifat bertanda vs tidak bertanda jenis bait. Apabila kod Java menukar nilai pembilang negatif kepada tatasusunan bait, bait yang terhasil ditafsirkan sebagai nilai yang ditandatangani. Sebaliknya, penukaran Golang mengekalkan sifat nilai pembilang yang tidak ditandatangani.
Penyelesaian
Untuk mengimbangi tafsiran bait yang berbeza, adalah perlu untuk mengalihkan nilai bait Java negatif sebanyak 256 untuk mendapatkan nilai yang tidak ditandatangani.
Base64 lwn. Pengekodan Hex
Satu lagi perbezaan antara pelaksanaan Java dan Golang terletak pada skema pengekodan yang digunakan. Pelaksanaan Java mengembalikan rentetan berkod heks, manakala pelaksanaan Golang mengembalikan rentetan berkod base64. Untuk hasil HOTP sepadan, seseorang mesti memastikan bahawa kedua-dua pelaksanaan menggunakan skema pengekodan yang sama.
Petua Tambahan
Dengan mempertimbangkan nuansa perwakilan bait dan perbezaan pengekodan, anda boleh menyelesaikan percanggahan antara pelaksanaan Java dan Golang bagi HOTP (RFC-4226).
Atas ialah kandungan terperinci Mengapakah Pelaksanaan Java dan Golang HOTP (RFC-4226) Menghasilkan Keputusan yang Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!