คำถามติดแท็ก uuid

2
กลยุทธ์ในการสร้างตัวระบุที่ไม่ซ้ำใครและปลอดภัยสำหรับใช้ในแอปพลิเคชันเว็บ "บางครั้งออฟไลน์"
ฉันมีโครงการบนเว็บที่ให้ผู้ใช้สามารถทำงานได้ทั้งออนไลน์และออฟไลน์และฉันกำลังมองหาวิธีในการสร้างรหัสที่ไม่ซ้ำกันสำหรับบันทึกในฝั่งไคลเอ็นต์ ฉันต้องการวิธีการที่ใช้งานได้ในขณะที่ผู้ใช้ออฟไลน์ (เช่นไม่สามารถพูดคุยกับเซิร์ฟเวอร์) ได้รับการรับรองว่าไม่ซ้ำใครและปลอดภัย ด้วย "ความปลอดภัย" ฉันกังวลเป็นพิเศษเกี่ยวกับลูกค้าที่ส่งรหัสซ้ำ (โดยไม่ประสงค์ดีหรืออย่างอื่น) และทำให้เกิดความเสียหายต่อความสมบูรณ์ของข้อมูล ฉันทำ googling มาบ้างหวังว่านี่จะเป็นปัญหาที่แก้ไขแล้ว ฉันไม่พบสิ่งใดที่ชัดเจนมากโดยเฉพาะในแง่ของวิธีการที่ใช้ในระบบการผลิต ฉันพบตัวอย่างบางส่วนสำหรับระบบที่ผู้ใช้จะเข้าถึงข้อมูลที่พวกเขาสร้างขึ้นเท่านั้น (เช่นรายการสิ่งที่ต้องทำที่เข้าถึงได้บนอุปกรณ์หลายเครื่อง แต่เฉพาะผู้ใช้ที่สร้างขึ้นเท่านั้น) น่าเสียดายที่ฉันต้องการบางสิ่งที่ซับซ้อนกว่านี้เล็กน้อย ฉันพบความคิดที่ดีจริงๆที่นี่ซึ่งสอดคล้องกับวิธีที่ฉันคิดว่าสิ่งต่าง ๆ อาจทำงานได้ ด้านล่างนี้เป็นโซลูชันที่เสนอของฉัน ข้อกำหนดบางประการ รหัสควรไม่ซ้ำกันทั่วโลก (หรืออย่างน้อยไม่ซ้ำกันภายในระบบ) สร้างขึ้นบนไคลเอนต์ (เช่นผ่านทางจาวาสคริปต์ในเบราว์เซอร์) ปลอดภัย (ดังที่อธิบายไว้ข้างต้นและอื่น ๆ ) ข้อมูลสามารถดู / แก้ไขโดยผู้ใช้หลายคนรวมถึงผู้ใช้ที่ไม่ได้เขียน ไม่ทำให้เกิดปัญหาเรื่องประสิทธิภาพที่สำคัญสำหรับแบ็กเอนด์ db (เช่น MongoDB หรือ CouchDB) โซลูชันที่เสนอ เมื่อผู้ใช้สร้างบัญชีพวกเขาจะได้รับ uuid ซึ่งสร้างขึ้นโดยเซิร์ฟเวอร์และทราบว่าไม่ซ้ำกันภายในระบบ รหัสนี้จะต้องไม่เหมือนกับโทเค็นการตรวจสอบความถูกต้องของผู้ใช้ ลองเรียกรหัสนี้ว่า "id token" ของผู้ใช้ เมื่อผู้ใช้สร้างเรกคอร์ดใหม่พวกเขาสร้าง uuid …

6
การชนของ UUID [ปิด]
มีใครทำวิจัยจริงเกี่ยวกับความน่าจะเป็นของการชนของ UUID โดยเฉพาะกับ UUIDs รุ่นที่ 4 (สุ่ม) เนื่องจากเครื่องกำเนิดหมายเลขสุ่มที่เราใช้นั้นไม่ได้สุ่มอย่างแท้จริงและเราอาจมีเครื่องที่เหมือนกันหลายสิบหรือหลายร้อยเครื่องทำงานด้วยรหัสเดียวกัน สร้าง UUIDs หรือไม่ เพื่อนร่วมงานของฉันพิจารณาการทดสอบว่าการชนกันของ UUID นั้นเป็นการเสียเวลาอย่างสมบูรณ์ แต่ฉันมักจะใส่รหัสเพื่อตรวจสอบข้อยกเว้นคีย์ซ้ำจากฐานข้อมูลและลองใหม่ด้วย UUID ใหม่ แต่นั่นจะไม่แก้ปัญหาถ้า UUID มาจากกระบวนการอื่นและอ้างถึงวัตถุจริง
33 random  uuid 

7
จะสร้าง UUID ที่“ ปลอดภัยต่อภาษา” ได้อย่างไร
ฉันต้องการใช้สตริงที่สร้างขึ้นแบบสุ่มสำหรับ ID ทรัพยากรของฉันดังนั้นฉันอาจมี URL ที่สั้นกว่านี้: / user / 4jz0k1 แต่ฉันไม่เคยทำเพราะฉันกังวลเกี่ยวกับการสร้างสตริงแบบสุ่มที่สร้างคำที่แท้จริงเช่น: / user / f * cker สิ่งนี้ทำให้เกิดปัญหาสองประการ: อาจทำให้ผู้ใช้สับสนหรืออาจทำให้เกิดความไม่พอใจและอาจทำให้เกิดปัญหากับ SEO ได้เช่นกัน จากนั้นฉันคิดว่าสิ่งที่ฉันต้องทำคือตั้งค่ารูปแบบคงที่เช่นเพิ่มตัวเลขทุกตัวอักษร 2 ตัว ฉันมีความสุขมากกับวิธี 'generate_safe_uuid' ของฉัน แต่แล้วฉันก็รู้ว่ามันดีกว่าสำหรับ SEO และแย่กว่าสำหรับผู้ใช้เพราะมันเพิ่มอัตราส่วนของคำที่สร้างขึ้นจริงเช่น: / user / g4yd1ck5 ตอนนี้ฉันคิดว่าฉันสามารถสร้างวิธีการ 'replace_numbers_with_letters' และตรวจสอบว่ามันไม่ได้สร้างคำใด ๆ กับพจนานุกรมหรืออะไรบางอย่าง ความคิดอื่น ๆ ? PS เมื่อฉันเขียนสิ่งนี้ฉันก็ตระหนักว่าการตรวจสอบคำในภาษามากกว่าหนึ่งภาษา (เช่น: อังกฤษและฝรั่งเศส, สเปน, ฯลฯ ) จะเป็นเรื่องยุ่งเหยิงและฉันก็เริ่มหลงรัก ID …
20 random  uuid 

2
เหตุใด UUID / GUID จึงอยู่ในรูปแบบ
Globally Unique Identifiers (GUID) เป็นสตริงที่จัดกลุ่มด้วยรูปแบบเฉพาะซึ่งฉันถือว่ามีเหตุผลด้านความปลอดภัย GUID ถูกเขียนโดยทั่วไปในข้อความเป็นลำดับเลขฐานสิบหกที่แยกออกเป็นห้ากลุ่มเช่น: 3F2504E0-4F89-11D3-9A0C-0305E82C3301 เหตุใดสตริง GUID / UUID จึงไม่เพียงแค่เข้ารหัสแบบสุ่มโดยใช้เลขฐานสิบหกของความยาว X สัญลักษณ์ข้อความนี้มีฟิลด์ต่อไปนี้คั่นด้วยเครื่องหมายขีดคั่น: | Hex digits | Description |------------------------- | 8 | Data1 | 4 | Data2 | 4 | Data3 | 4 | Initial two bytes from Data4 | 12 | Remaining six bytes from Data4 นอกจากนี้ยังมีหลายรุ่นมาตรฐาน …
14 uuid 

8
สคีมาที่ดีในการแสดงตัวเลขจำนวนเต็มตั้งแต่ 0 ถึงอินฟินิตี้สมมติว่าคุณมีที่เก็บข้อมูลไบนารีเชิงเส้นไม่สิ้นสุดใช่หรือไม่
ฉันต้องการสคีมาเพื่อแสดงตัวเลขจำนวนเต็มเริ่มต้นด้วย 0 โดยไม่มีขีด จำกัด ใด ๆ (สมมติว่าการเข้าถึงหน่วยเก็บข้อมูลเชิงเส้นไม่มีที่สิ้นสุด) นี่คือสคีมาที่สามารถแสดงตัวเลขตั้งแต่ 0 ถึง 255: ใช้ไบต์แรกของที่เก็บข้อมูล (ที่อยู่ 0) เพื่อเก็บจำนวนเต็ม ทีนี้สมมติว่าฉันต้องการแสดงตัวเลขที่มากกว่า 255 แน่นอนฉันสามารถใช้มากกว่า 1 ไบต์เพื่อแทนจำนวนเต็ม แต่ตราบใดที่มันเป็นจำนวนคงที่ในที่สุดก็จะมีจำนวนเต็มจนไม่สามารถแทนด้วย สคีมาเดิม นี่คือสคีมาอีกอย่างที่ควรจะสามารถทำงานได้ แต่มันอาจยังห่างไกลจากประสิทธิภาพ เพียงใช้ไบต์ "สิ้นสุดจำนวน" ที่ไม่ซ้ำกันและใช้ไบต์ก่อนหน้านี้ทั้งหมดเพื่อแสดงตัวเลข เห็นได้ชัดว่าไบต์ "สิ้นสุดจำนวน" นี้ไม่สามารถใช้ที่ใดก็ได้ในการแทนตัวเลข แต่สามารถทำได้โดยใช้ระบบฐาน 255 (แทนที่จะเป็นฐาน 256) อย่างไรก็ตามมันช้าและอาจไม่มีประสิทธิภาพ ฉันต้องการมีเครื่องที่ดีกว่าที่ทำงานได้ดีกว่าด้วยค่าที่ต่ำและเครื่องชั่งที่ดี โดยพื้นฐานแล้วมันเป็นระบบ UUID ฉันต้องการดูว่าเป็นไปได้หรือไม่ที่จะสร้างระบบ UUID ที่รวดเร็วและมีประสิทธิภาพซึ่งสามารถปรับขนาดให้ใช้งานได้หลายปีหลายพันปีล้านปีโดยไม่ต้องออกแบบใหม่
10 storage  numbers  uuid 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.