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)
}
ผลที่ได้
เท่ากันสักที เอาไปใช้งานต่อได้แล้ววว