base64 เป็นวิธีแปลง(encode/decode)ข้อมูลครับ
ไม่ใช่การ encrypt/decrypt เลยทำให้ผมพอเดาได้ ตาม code ที่เขียน
ปรกติ base64 จะใช้สำหรับแปลงข้อมูลที่เป็น binary
หรือข้อมูลที่มีตัวอักษรพิเศษ ไปเป็นข้อมูลที่เป็น text 64 ตัว
เป็นที่มาของชื่อ base64 คือหนึ่งหลักมีเลขอยู่ 64 ตัว
ปรกติก็จะประกอบไปด้วย 0-9 (10 ตัว) A-Z (26 ตัว) a-z (26 ตัว)
รวมเป็น 62 ตัวบวกกับ symbol อีกสองตัว
จะสังเกตได้ว่า ถ้าเลือก symbol ดีๆ ผลลัพธ์ของ base64
จะไปใช้ทำอะไรได้หลายอย่างโดยไม่มีปัญหา เช่น
ส่งไปทาง mail ด้วย smtp protocol (ซึ่งมันจะรับแค่ 7 bits)
ใส่ลงไปใน database โดยใช้ sql statement
ทำเป็น parameter ส่งไปทาง url แบบ get method
เป็นต้น

การแปลงข้อมูล(encode)ไปเป็น base64 มีหลักอยู่ว่า
ข้อมูลปลายทางแต่ละหลัก(ตัว)มีความเป็นไปได้ 64 ตัวอักษร
64 คือ 2 ยกกำลัง 6 ดังนั้นเราต้องการข้อมูลต้นทางแค่ 6 bits
สำหรับข้อมูลปลายทางแต่ละตัว(8 bits)
พูดง่ายๆคือ เอาข้อมูลต้นทางมาทีละ 6 bits
convert เป็นข้อมูลปลายทาง 8 bits
ตอนทำกลับ(decode)ก็เอาข้อมูลมาทีละตัว(8 bits)
แล้ว convert เป็น 6 bits ใส่กลับไปเป็นผลลัพธ์
ความยากก็อยู่ตรง 6 bits 8 bits นี่แหละครับ

สรุปว่า base64 ใช้สำหรับแปลงข้อมูล ไม่ใช่การ encrypt
ถึงแม้ว่าดูเหมือนแปลงไปแล้วจะดูไม่รู้เรื่องก็ตาม


ตัวอย่าง Code ในการ Decode
[hide=5][code]
#include <stdio.h>
char code[] = "MS1rbGotNTY3LXF3ZS03LTY1NzgtZXJ0";
void trans(char *b64) {