كيفية إنشاء سلسلة التجزئة مع بعض القواعد الخاصة في PHP؟

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

سؤال

أنا أعمل في مشروع أحتاج إلى استخدام بعض وظائف التجزئة لصنع سلسلة التجزئة. يجب أن تكون سلسلة التجزئة هذه فريدة من 6 إلى 13 حرفًا (طول ثابت).

أستخدم قاعدة بيانات لتخزين البيانات ، لذلك لكل سجل ، لدي معرف فريد. أريد استخدام هذا المعرف الفريد لصنع سلسلة التجزئة (لتحقيق تفرد سلسلة التجزئة المنتجة).

أحتاج إلى سلسلة التجزئة هذه لتتكون من أحرف صالحة فقط (0-9 AZ AZ).

ما هي وظيفة التجزئة التي يجب أن أستخدمها لتحقيق هذا الهدف؟ كيف يمكنني توليد سلاسل التجزئة؟

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

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

المحلول

استخدم سرداب:

$hash = crypt("somevaluetohash", $uniqueid);

المعرف الفريد هو ملح حتى تتمكن من إنشاء قيم مختلفة حسب المعرف. لذا ، إذا كان لدى أحد المستخدمين كلمة مرور لـ "SomeValuetohash" وكان مستخدمًا آخر لديه نفس الشيء ، فلن يكون تجزئة النهاية هو نفسه.

نصائح أخرى

<?php
  $id;
  $hash_full = md5($id); //hash('sha256', $id);
  $hash_cropped = substr($hash_full, 0, 6);
?>

يستخدم hash () لخوارزميات التجزئة الأخرى.

ولكن ماذا تحتاج هذا التجزئة؟ بالنسبة لي ، ليس من المنطقي إنشاء علامة تجزئة من الهوية ، ألا يمكنك استخدام المعرف بدلاً من ذلك؟

هل تحتاج حقًا إلى أن تكون فحوصات تشفير؟ أم أن عمليات فحص أبسط مناسبة؟ هل المفتاح الأساسي المقدم من قاعدة البيانات نفسه غير مناسب؟

لديك الكثير من الخيارات ، من أبسط CRC32 إلى الأكثر تقوية SHA512.

ولكن إذا كنت تفعل هذا لبعض التطبيقات المحددة (مثل نظام الملفات, ، أو العثور على الأشياء القريبة باستخدام بعض المقاييس) ، فسيتعين عليك تحديد المزيد من مشكلتك.

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