कुछ महीने पहले मुझे अपने वेब एप्लिकेशन के लिए एक अद्वितीय और यादृच्छिक कोड लागू करने के साथ काम सौंपा गया था। कोड को उपयोगकर्ता के अनुकूल और जितना संभव हो सके छोटा होना चाहिए, लेकिन फिर भी अनिवार्य रूप से यादृच्छिक होना चाहिए (इसलिए उपयोगकर्ता आसानी से अनुक्रम में अगले कोड की भविष्यवाणी नहीं कर पाएंगे)।मैं एक अद्वितीय, छोटी, यादृच्छिक और उपयोगकर्ता के अनुकूल कुंजी कैसे उत्पन्न कर सकता हूं?
Af3nT5Xf2
दुर्भाग्य से, मैं कार्यान्वयन से संतुष्ट नहीं था:
यह उन मानों के कुछ इस तरह देखा पैदा करने समाप्त हो गया। ग्विड सवाल से बाहर थे, वे उपयोगकर्ताओं के लिए टाइप करने के लिए बस बहुत बड़े और मुश्किल थे। मैं 4 या 5 अक्षरों/अंकों की रेखाओं के साथ कुछ और करने की उम्मीद कर रहा था, लेकिन अगर हम एन्कोड करते हैं तो हमारा विशेष कार्यान्वयन ध्यान से पैटर्न वाले अनुक्रम उत्पन्न करेगा 9 से कम वर्ण।
हम डेटाबेस से एक अनूठा अनुक्रमिक 32bit आईडी खींच लिया:
यहाँ है कि हम क्या कर समाप्त हो गया है। इसके बाद हमने इसे 64 बिट रैंडम पूर्णांक के केंद्र बिट्स में डाला। हमने आसानी से टाइप किए गए और पहचाने गए पात्रों की एक लुकअप टेबल बनाई है (ए-जेड, ए-जेड, 2-9 एल, एल, 1, ओ, 0 इत्यादि जैसे आसानी से उलझन वाले पात्रों को छोड़कर)। आखिरकार, हमने बेस-54 को 64-बिट पूर्णांक एन्कोड करने के लिए उस लुकअप टेबल का उपयोग किया। उच्च बिट यादृच्छिक थे, कम बिट्स यादृच्छिक थे, लेकिन केंद्र बिट्स अनुक्रमिक थे।
अंतिम परिणाम एक कोड था जो एक गाइड से बहुत छोटा था और यादृच्छिक लग रहा था, भले ही यह बिल्कुल नहीं था।
मैं इस विशेष कार्यान्वयन से कभी संतुष्ट नहीं था। तुमने क्या किया होगा?
आपको अनुक्रमिक मूल्य की आवश्यकता क्यों है? क्या आप इसे वापस ले चुके हैं? यदि हां, तो एक गुप्त कुंजी के साथ अपने अनुक्रमिक संख्या को एन्क्रिप्ट करने के लिए क्रिप्टो फ़ंक्शन का उपयोग करें और सिफर को अपनी पसंद के अनुसार वर्णमाला के साथ एन्कोड करें। – Oli