ทีมของฉันได้มอบรหัสฝั่งเซิร์ฟเวอร์ (ใน 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ค่าทั้งหมด