ما هي الطريقة الجيدة لإنشاء أسماء ملفات/مجلدات قصيرة وفريدة من نوعها؟

StackOverflow https://stackoverflow.com/questions/809390

  •  03-07-2019
  •  | 
  •  

سؤال

المعايير هي في الأساس هذا:

  • ستكون المجلدات موجودة لمدة 24-48 ساعة تقريبًا
  • لا يمكن للمستخدم تخمين أسماء المجلدات بسهولة (إذا تم استخدامها في عنوان URL)
  • يجب أن تكون أسماء المجلدات قصيرة من 5 إلى 15 حرفًا

الأفكار الأولية:

printf('%u',crc32(microtime(true)));

تفاصيل:عند تحميل ملف، أريد بشكل أساسي الاحتفاظ باسم الملف الفريد كما تم تسميته بواسطة القائم بالتحميل، لذا لتجنب أي تضارب في الأسماء، أود وضعه في دليل مسمى بشكل فريد ...

هل كانت مفيدة؟

المحلول

[عدل] انتظر ثانية.PHP يتضمن الحق في المكتبة القياسية أ وظيفة مولد معرف فريد.هناك نهج أخرى أيضاً.

نصائح أخرى

التقنية الكلاسيكية تبدو هكذا

  + uploader-name  
    + 20090401
      + 010000     // hhmmss
      + 013000     // hhmmss
      + 014500     // hhmmss
    ...

    + 20090402

إضافة مستويات، وإلحاق "أ"، "ب"، "ج"، ...إلخ.على أساس التفاصيل المطلوبة.

هذا يعمل خاصة.حسنًا إذا كان المستخدم يتعلق بالملفات على الإطلاق بترتيب زمني.

سينتهي بك الأمر بإجراء بعض عمليات تعداد الوجود، لكن الأمر ليس مؤلمًا إلى هذا الحد.لقد استخدمت هذا عدة مرات (بما في ذلك مع PHP)، ويرجع ذلك أساسًا إلى أن مقاومة المستخدم أقل من أي بديل وجدته.

إذا كنت ترغب في ذلك، يمكنك تجميل تعبيرات التاريخ - "2009-Apr-01"، "01:45 صباحًا"، وما إلى ذلك.

لم يتم تحديد اللغة، في روبي سأفعل:

require 'digest/md5'
Digest::MD5.hexdigest(Time.now.to_s)

=> "f531384b3cc8c60b7c5b7ad087cb0ae4"

يبدو هذا وكأنه مشكلة "الأمن بالغموض".أوصي بعدم استخدام أي شيء قد يؤدي إلى إنشاء بيانات حساسة ويكشفها (حتى لفترة قصيرة) بطريقة آمنة فقط لأنه من المتوقع ألا يخمن أحد الموقع.توجد هجمات القوة الغاشمة، ويمكنها تمزيق هذا النوع من "الأمن".

استخدم التاريخ والوقت لإنشاء الاسم

سأستخدم شيئًا مثل:

$salt='Whatever you want';
$folderName=SHA1($salt.date('U'));

تقوم Date('U') بإرجاع الثواني منذ عصر Unix (1 يناير 1970 00:00:00 بتوقيت جرينتش) لذا من المحتمل أن تكون فريدة ما لم تقم بإنشاء مجلدات متعددة في نفس الوقت؟

في هذه الحالة، ما عليك سوى تغيير قيمة $salt بمهارة (اجعلها اسم مستخدم أو رقمًا عشوائيًا وما إلى ذلك).

إن تحديد وقت التجزئة (إما md5 أو sha) يجعل من الممكن تخمينه إذا كان المستخدم يعرف تقريبًا متى تم إنشاء الدليل.كل ما يحتاجون إليه هو إعداد برنامج نصي بسيط لتوليد جميع الاحتمالات المغطاة لبضع ثوان على كلا الجانبين ثم الضغط على الموقع بحثًا عن استجابة.إن إضافة الملح، على الرغم من أنه سيساعد، إلا أنه لا يفيد كثيرًا على المدى الطويل.

بالنسبة إلى OP، ما ورد أعلاه ينطبق على أي طريقة.إذا كنت تستخدم خادمًا سريعًا جدًا، فستحتاج إلى مراقبة النتائج مقابل الأدلة العشوائية.وجود أدلة مكونة من 5 أحرف فقط يعني أنه يمكن لأي شخص الوصول إلى الموقع يدويًا مرات كافية لاكتشاف الدليل.15 يزيدها إلى حد ما، ولكن مع وجود عدد قليل من الآلات التي تقوم بذلك بطريقة مكتوبة، فإن هذا ليس مستبعدًا.

يحتوي معيار C++ على وظائف tmpfile وtmpnum، وكلاهما في cstdio (stdio.h)، ويقوم بإنشاء ملف مؤقت واسم ملف مؤقت وفقًا لذلك.يتم حذف tmpfile في نهاية البرنامج بالرغم من ذلك.أود ربطها ولكن للأسف لا أستطيع نشر الروابط حتى الآن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top