1 min read

Base64 Encoding with Golang

Base64 Encoding with Golang

ปัญหาได้ค่า base64 ไม่เหมือนกัน จาก 2 ระบบ

จริงๆปัญหาที่เจอนี้ ไม่ได้เป็นที่ Golang แต่เนื่องจากตอนนี้ผมได้ใช้ Golang ทำงานอยู่จึงยกตัวอย่างด้วย Golang แทนครับ

ปัญหาที่เจอมาคือ ทางทีมมีการเปลี่ยนระบบ key management ทำให้การยิง API ไปขอ key นั้น ได้ค่า key มาไม่เหมือนกันแต่ต่างกันแค่เล็กน้อย

System 1: JGVjcmV0QDEgcGEkJHdvcmQ/fg==
System 2: JGVjcmV0QDEgcGEkJHdvcmQ_fg==

ซึ่งทั้งสองระบบนี้ส่งเป็น base64 มาให้

ผมก็งงว่าทำไมได้ไม่เหมือนกัน จนถามกลับไปหาทีมที่ทำระบบนี้จึงได้รู้ว่า ทั้งสองระบบนั้น encode base64 ต่างกัน คือ base64 URL กัน base64 standard

จึงลอง decode มาใหม่ ก็เลยได้เท่ากันตาม code ด้านล้างนี้เลย

package main

import (
	"encoding/base64"
	"fmt"
)

func main() {
	s1 := "JGVjcmV0QDEgcGEkJHdvcmQ/fg=="
	s2 := "JGVjcmV0QDEgcGEkJHdvcmQ_fg=="

	s1Decode, err := base64.StdEncoding.DecodeString(s1)
	if err != nil {
		fmt.Printf("Error: %v", err)
	}
	fmt.Printf("System 1: %v\n", s1Decode)

	s2Decode, err := base64.URLEncoding.DecodeString(s2)
	if err != nil {
		fmt.Printf("Error: %v", err)
	}
	fmt.Printf("System 2: %v\n", s2Decode)
}

ผลที่ได้

เท่ากันสักที เอาไปใช้งานต่อได้แล้ววว