ทีมของฉันได้มอบรหัสฝั่งเซิร์ฟเวอร์ (ใน Java) ที่สร้างโทเค็นแบบสุ่มและฉันมีคำถามเกี่ยวกับสิ่งเดียวกัน -
วัตถุประสงค์ของโทเค็นเหล่านี้มีความอ่อนไหวพอสมควร - ใช้สำหรับรหัสเซสชันลิงก์การตั้งรหัสผ่านเป็นต้นดังนั้นพวกเขาจึงจำเป็นต้องมีการสุ่มเข้ารหัสเพื่อหลีกเลี่ยงใครบางคนที่เดาพวกเขา โทเค็นคือ "ยาว" ดังนั้นจึงมีความยาว 64 บิต
รหัสปัจจุบันใช้java.util.Random
คลาสเพื่อสร้างโทเค็นเหล่านี้ เอกสารสำหรับการjava.util.Random
ระบุอย่างชัดเจนต่อไปนี้:
อินสแตนซ์ของ java.util.Random ไม่ปลอดภัยแบบเข้ารหัส พิจารณาใช้ SecureRandom แทนเพื่อให้เครื่องสร้างตัวเลขสุ่มหลอกเข้ารหัสลับปลอดภัยสำหรับใช้โดยแอปพลิเคชันที่มีความปลอดภัย
อย่างไรก็ตามวิธีการที่ใช้รหัสในปัจจุบันjava.util.Random
คือ - มันทำให้คลาสเป็นอินสแตนซ์java.security.SecureRandom
แล้วใช้SecureRandom.nextLong()
วิธีการรับเมล็ดที่ใช้สำหรับอินสแตนซ์java.util.Random
ชั้น จากนั้นจะใช้java.util.Random.nextLong()
วิธีการสร้างโทเค็น
ดังนั้นคำถามของฉันตอนนี้ - มันยังไม่ปลอดภัยหรือไม่เมื่อjava.util.Random
ใช้เมล็ดjava.security.SecureRandom
? ฉันจำเป็นต้องแก้ไขรหัสเพื่อใช้เป็นjava.security.SecureRandom
เอกสิทธิ์ในการสร้างโทเค็นหรือไม่
ในปัจจุบันเมล็ดรหัสนั้นเป็นRandom
ครั้งเดียวเมื่อเริ่มต้น
Random
เริ่มต้นครั้งเดียวหรือไม่หรือเป็นรหัสใหม่สำหรับทุกโทเค็นหรือไม่ หวังว่านี่เป็นคำถามที่โง่ แต่ฉันคิดว่าฉันจะตรวจสอบ
long
หรือdouble
ค่าทั้งหมด