Decode Encode และ Decrypt Encrypt by Golang [#Part1]

Tanaporn Kongsri
2 min readMay 5, 2021
https://www.aureon.com/services/it-management/it-services/security/data-encryption-why-you-should-protect-your-business/

สวัสดีค่า วันนี้เราจะมาเขียน blog เรื่อง decode encode และ decrypt encrypt โดยใช้ golang กัน ว่าแต่ เรามาปูพื้นฐานง่ายๆ ว่ามันคืออะไรกันก่อนดีกว่าค่ะ

Decode และ Encode คืออะไร

Decode และ Encode ก็คือ การเข้ารหัส ของข้อมูลโดยที่ไม่จำเป็นจะต้องใช้ key ในการเข้ารหัสของข้อมูล จะพูดง่ายก็คือการที่เรานำ value ที่เป็นค่า plain text มาทำกระบวนการอย่างใดอย่างนึงให้อ่านไม่ออก แต่เราจะสามารถนำกระบวนแบบเดิมมาแกะได้เช่นกัน

และ Decrypt และ Encrypt คืออะไรล่ะ

ส่วน Decrypt และ Encrypt ก็เหมือน Decode และ Encode เลยค่า แตกต่างกันเพียงว่า จะเป็นการเข้ารหัสโดยอาศัย key ในการเข้ารหัส เช่น secret key, public key, private key สามารถมี algorithm หลายอย่างเช่น AES, DES, RSA

เมื่อเราเข้าใจพื้นฐานกันล่ะ เราลองเขียนด้วย golang กันเถอะ !!

ในที่นี้จะเป็นการ encode-decode ด้วย base64 กันค่า

เริ่มแรก สร้างโปรเจค แล้วทำการใช้โค๊ดตัวอย่างด้านล่างนี้ได้เลยค่า

เมื่อเราลองรันดูจะได้ผลลัพธ์ ดังนี้ค่า

ZW5jb2RlLWRlY29kZQ==
encode-decode
ZW5jb2RlLWRlY29kZQ==
encode-decode

เรียบร้อยค่า กับตัวอย่าง encode decode ด้วย base64 ค่า ต่อไปเรามาลอง encrypt และ decrypt กันค่ะ

ส่วน encrypt และ decrypt นั้นจะเป็นเหมือนเมื่อกล่าวไปข้างต้นคือ การเข้ารหัสที่ต้องอาศัยคีย์ในการช่วยเข้า หรือแกะออก จะแบ่งออกเป็น 2 ประเภทได้ค่ะ

  1. Symmetric Encryption คือการเข้ารหัสแบบสมมาตร ถ้าจะจำง่ายๆ ล่ะ มันก็คือการเข้าและออกด้วยค่าที่เท่านั้น ก็คือคีย์เดียวกันนี้เอง algorithm ที่ส่วนใหญ่เราจะรู้จัก คือ AES, DES เป็นต้น
https://www.jittagornp.me/blog/what-is-public-key-private-key/

2. Asymmetric Encryption คือการเข้ารหัสแบบอสมมาตร การเข้าและออกด้วยคีย์ที่ไม่ใช่คีย์เดียวกัน การใช้ public และ private คือเข้ามาเป็นส่วนช่วย ตัวอย่าง algorithm ที่รู้จักกันดีก็คือ RSA เป็นต้น

https://www.jittagornp.me/blog/what-is-public-key-private-key/

โอเค ต่อไปเราจะมาลอง encypte data โดยใช้ go กันเถอะ

เริ่มจาก Symmetric Encryption โดยใช้ AES เป็นการใช้ secret key หรือคีย์เดียวในการถอดรหัส

เรามาลองดู code go กันเถอะ

AES นอกจาก AES ธรรมดาแล้ว ยังมีหลายโหมดย่อยให้สามารถเลือกใช้งาน AES ได้อีกด้วย เราลองยกตัวอย่างสัก 1 mode ย่อย

GCM

จะได้ result ดังนี้

ENCRYPT: c942c17e95c841f7a558d12912e8d1b6523bc9b0fa515a96a92c271822cfb7cc0c53
DECRYPT: example plain text

มีหลายโหมดที่น่าสนใจ สำหรับ AES สามารถเข้าไปศึกษาเพิ่มเติมได้ที่ลิ้งค์นี้

สำหรับพาทนี้ก็จบไปเรียบร้อยแล้วค่ะ พาทต่อไปเราจะมาลองใช้ Asymmetric Encryption ที่ต่อ go กันเถอะ

เนื้อหาเพิ่มเติม :

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเนื้อหาพื้นฐานของ encryption data สามารถไปทำความเข้าใจเพิ่มเติมได้จากลิ้งค์นี้

--

--