การเข้ารหัสสคริปต์

ในบทนี้ คุณจะได้เรียนรู้วิธีการเข้ารหัสโมดูลหรือสคริปต์ FIRERPA ที่คุณพัฒนาขึ้น บทนี้ไม่ได้เกี่ยวกับการเข้ารหัสสคริปต์บน PC ของคุณ แต่เป็นการเข้ารหัสสคริปต์หรือโมดูลที่ทำงานในสภาพแวดล้อม Python ที่ติดตั้งมากับ FIRERPA เช่น โมดูลใน /data/usr/module/task, /data/usr/module/extension หรือสคริปต์ที่รันโดยใช้คำสั่ง Python ที่ติดตั้งมาในตัว เราได้จัดเตรียมเครื่องมือที่เกี่ยวข้องเพื่อช่วยให้คุณดำเนินการได้อย่างรวดเร็ว และในบทนี้คุณจะได้เรียนรู้วิธีการปกป้องสคริปต์ที่คุณพัฒนาขึ้น

การเข้ารหัสสคริปต์ใช้วิธีการแปลงโค้ดเป็น C ด้วย Cython แล้วคอมไพล์เป็นไฟล์ so ซึ่งจะไม่ส่งผลกระทบต่อประสิทธิภาพการทำงานของคุณมากนัก อย่างไรก็ตาม เราแนะนำให้คุณเข้ารหัสเฉพาะส่วนตรรกะหลัก (core logic) เท่านั้น ไม่ใช่ไฟล์สคริปต์ทั้งหมด และโปรดอย่าใช้เพื่อเข้ารหัสไฟล์ของไลบรารีจากภายนอก (third-party library) เพราะเป็นการกระทำที่เปล่าประโยชน์ ควรยึดหลัก "เข้ารหัสเฉพาะตรรกะของคุณเอง" เสมอ

การสร้าง Image ของเครื่องมือ

เราพึ่งพา Docker เป็นอย่างมาก ดังนั้นโปรดเตรียม Docker ให้พร้อมก่อนดำเนินการต่อ ตอนนี้ โปรด clone https://github.com/firerpa/compiler และสร้าง image ตามเอกสารหรือใช้คำสั่งต่อไปนี้

docker build -t compiler .

การเข้ารหัสโค้ดสคริปต์

ใช้คำสั่งต่อไปนี้เพื่อ map source code เข้าไปใน image และทำการคอมไพล์ สถาปัตยกรรม (arch) ที่รองรับได้แก่ arm, arm64, x86, x86_64 ซึ่งสอดคล้องกับสถาปัตยกรรมต่างๆ ของเซิร์ฟเวอร์ FIRERPA และสถาปัตยกรรมที่แตกต่างกันจะไม่สามารถทำงานร่วมกันได้

docker run -it --rm -v /source/dir:/data compiler:latest compile.sh --arch arm64 /data/my_important_script.py

โดยปกติแล้ว หลังจากรันคำสั่ง คุณจะได้รับไฟล์ my_important_script.cpython-39.so ในไดเรกทอรีเดียวกับสคริปต์ของคุณ โปรดอย่าเปลี่ยนชื่อไฟล์นี้ หากคุณต้องการใช้ชื่ออื่น คุณควรเปลี่ยนชื่อไฟล์สคริปต์โดยตรง ตอนนี้ ในสคริปต์ที่คุณจะเผยแพร่ คุณสามารถลบไฟล์ source code .py ที่เกี่ยวข้องออกไป และใส่ไฟล์ .so เข้าไปแทนได้เลย

ข้อควรสนใจ

หากโค้ดของคุณไม่ใช่โมดูลของ FIRERPA (extension, task) และมีเพียงไฟล์เดียว Python จะไม่สามารถรันไฟล์ .so ได้โดยตรง คุณจะต้องเขียนสคริปต์ .py ที่เป็น entry point เพื่อ import และเรียกใช้งานไฟล์ .so ที่เข้ารหัสแล้ว หากเป็นโมดูล คุณสามารถนำไปวางในไดเรกทอรีที่เกี่ยวข้องแล้วรีสตาร์ทได้เลย