ในระหว่างที่ฉันค้นคว้าเกี่ยวกับแอปพลิเคชันจาวา ฉันค้นพบว่า ถัดไปInt(64)
หน้าที่ของ java.Random()
คลาสใช้เพื่อสร้างคีย์การเข้ารหัส
ขนาดกุญแจคือ 16 ไบต์. ฉันรู้ว่าไม่แนะนำให้ใช้ตัวสร้างนี้เพราะมีความเสี่ยง โดยเฉพาะอย่างยิ่งในกรณีนี้ ค่าของคีย์แต่ละไบต์จะถูกเลือกจากช่วงสั้นๆ จาก 0x0 ถึง 0x40.
ฉันคุ้นเคยกับความจริงที่ว่ามันเป็นไปได้ที่จะ ทำนาย ค่าถัดไป ââของตัวสร้างโดยใช้ค่าก่อนหน้า แต่ในกรณีของฉัน meyan ไม่มีข้อมูลเกี่ยวกับค่าก่อนหน้า (คีย์ถูกเข้ารหัสและฉันไม่สามารถเข้าถึงค่าของมันได้) ดังนั้นในที่นี้เรากำลังพูดถึงการวนซ้ำของค่าคีย์ ฉันไม่เข้าใจว่าฉันจะใช้ข้อมูลที่แต่ละค่าถัดไปขึ้นอยู่กับค่าก่อนหน้า (พารามิเตอร์ oldseed) ได้อย่างไร
ป้องกัน int ถัดไป (บิต int) {
oldseed ยาว, เน็กซ์ซีด;
AtomicLong seed = this.seed;
ทำ {
oldseed = seed.get();
nextseed = (ตัวคูณ oldseed * + ส่วนเพิ่ม) & mask;
} ในขณะที่ (!seed.compareAndSet(oldseed, nextseed));
กลับ (int)(nextseed >>> (48 - บิต));
}
จะลดจำนวนการแจงนับสำหรับคีย์ 16 ไบต์ดังกล่าวได้อย่างไร