Go:
การสร้างตัวเลขสุ่ม
วิธีการ:
ใน Go, ตัวเลขสุ่มถูกสร้างโดยใช้แพ็กเกจ math/rand
สำหรับตัวเลขสุ่มปลอมหรือ crypto/rand
สำหรับตัวเลขสุ่มปลอมที่ปลอดภัยทางเข้ารหัสลับ เรามาสำรวจทั้งสองกัน
การใช้ math/rand
สำหรับตัวเลขสุ่มปลอม
เริ่มแรก นำเข้าแพ็กเกจ math/rand
และแพ็กเกจ time
เพื่อปลูกฝังตัวสร้างตัวเลข การปลูกฝังทำให้คุณได้ลำดับของตัวเลขที่แตกต่างกันในแต่ละครั้งที่รัน
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())
fmt.Println("A random number:", rand.Intn(100)) // สร้างตัวเลขระหว่าง 0 และ 99
}
ตัวอย่างผลลัพธ์: A random number: 42
การใช้ crypto/rand
สำหรับตัวเลขสุ่มปลอมที่ปลอดภัยทางเข้ารหัสลับ
สำหรับการประยุกต์ใช้งานที่มีความสำคัญด้านความปลอดภัยมากขึ้น, แพ็กเกจ crypto/rand
เป็นทางเลือกที่เหมาะสมเนื่องจากมันสร้างตัวเลขสุ่มที่ยากต่อการคาดเดา ทำให้เหมาะสำหรับการดำเนินการทางคริปโตกราฟฟิค
package main
import (
"crypto/rand"
"fmt"
"math/big"
)
func main() {
n, _ := rand.Int(rand.Reader, big.NewInt(100))
fmt.Println("A secure random number:", n)
}
ตัวอย่างผลลัพธ์: A secure random number: 81
ศึกษาเพิ่มเติม
ความแตกต่างหลักระหว่างแพ็กเกจ math/rand
และ crypto/rand
ใน Go มาจากแหล่งกำเนิดของเอนโทรปีและการใช้งานที่ตั้งใจไว้ math/rand
สร้างตัวเลขสุ่มปลอมตามเมล็ดเริ่มต้น; ดังนั้นลำดับจึงเป็นแบบจำเพาะและสามารถคาดเดาได้หากทราบเมล็ดนั้น นี่เหมาะสำหรับสถานการณ์ที่ประสิทธิภาพสูงและไม่ใช่ความไม่สามารถคาดเดาเป็นประเด็นหลัก เช่น การจำลองสถานการณ์หรือเกม
ในทางกลับกัน, crypto/rand
ได้รับความไม่สุ่มจากระบบปฏิบัติการที่อยู่ภายใต้ ทำให้เหมาะสำหรับการใช้งานด้านคริปโตกราฟฟิคที่ความไม่สามารถคาดเดาเป็นสิ่งสำคัญ อย่างไรก็ตาม นี่มาพร้อมกับค่าใช้จ่ายด้านประสิทธิภาพและความซับซ้อนในการจัดการกับตัวเลขที่มันสร้าง (เช่น การจัดการกับประเภท *big.Int
สำหรับจำนวนเต็ม)
ในอดีต แนวคิดของการสร้างตัวเลขสุ่มในคอมพิวเตอร์มักจะเคลื่อนไหวตามขอบเขตของ “ความสุ่ม” ที่แท้จริง โดยระบบแรกๆ พึ่งพาอัลกอริทึมที่คงที่ซึ่งพยายามจำลองความสุ่ม ตามที่คอมพิวเตอร์พัฒนาขึ้น อัลกอริทึมเหล่านี้ก็ได้รับการปรับปรุงให้มีแหล่งกำเนิดเอนโทรปีที่ซับซ้อนมากขึ้นจากสภาพแวดล้อมของมัน
แม้จะมีการปรับปรุงเหล่านี้ การมองหาความสมบูรณ์แบบของความสุ่มในการคำนวณเป็นเรื่องที่ขัดแย้งในตัวเอง เนื่องจากธรรมชาติที่คงที่ของคอมพิวเตอร์เอง นี่คือเหตุผลที่ สำหรับส่วนใหญ่ของการประยุกต์ใช้งานที่ความสามารถในการคาดเดาอาจเป็นอันตราย ตัวเลขสุ่มปลอมที่ปลอดภัยทางเข้ารหัสลับจากแหล่งที่มาเช่น crypto/rand
เป็นทางเลือกที่ดีกว่า แม้ว่าจะมีภาระเพิ่มเติมก็ตาม
โดยสรุป, วิธีการของ Go กับสองแพ็กเกจที่แตกต่างกันสำหรับการสร้างตัวเลขสุ่มจัดการกับการลดทอนระหว่างประสิทธิภาพและความปลอดภัยได้อย่างสง่างาม เพื่อให้นักพัฒนาสามารถเลือกตามความต้องการเฉพาะของพวกเขา