2011-01-01 3 views
20

अब, यह यूआरएल शॉर्टनिंग के बारे में सख्ती से नहीं है, लेकिन मेरा उद्देश्य ऐसा वैसे भी है, तो चलो इसे इस तरह देखें। बेशक यूआरएल को छोटा करने के लिए कदम हैं:यूआरएल शॉर्टिंग एल्गोरिदम

  1. पूर्ण URL
  2. ले लो एक अनूठा कम स्ट्रिंग URL बनाएं
  3. स्टोर यूआरएल और एक डेटाबेस में कुंजी के लिए कुंजी होने के लिए (एक कुंजी मूल्य स्टोर यहां एक आदर्श मैच होगा)

अब, दूसरे बिंदु के बारे में।

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
DataOutputStream dos = new DataOutputStream(baos); 
UUID uuid = UUID.randomUUID(); 
dos.writeLong(uuid.getMostSignificantBits()); 
String encoded = new String(Base64.encodeBase64(baos.toByteArray()), "ISO-8859-1"); 
String shortUrlKey = StringUtils.left(encoded, 6); // returns the leftmost 6 characters 
// check if exists in database, repeat until it does not 

इस काफी अच्छा है: यहाँ मैं क्या लेकर आए हैं क्या है?

+0

उत्सुकता से, यूयूआईडी से परेशान क्यों? उदाहरण के लिए क्यों नहीं यादृच्छिक उदाहरण से 5 या तो बाइट उत्पन्न करते हैं? –

+1

मैंने बुद्धिमानी को एक यादृच्छिक/System.nanoTime/मैक एड्रेस 'बिट शुरू किया, फिर एहसास हुआ कि यूयूआईडी में ये सब हैं :-) – Bozho

+0

@ बोझो आप [बेस 32 एन्कोडिंग उर्फ ​​क्रॉकफोर्ड एन्कोडिंग] पर विचार करना चाहेंगे [http: //www.crockford .com/wrmg/base32.html) क्योंकि इसमें 0 और अक्षर एल जैसे संभावित अस्पष्ट पात्रों को हटाने जैसे कुछ फायदे हैं। यदि आप अरबों नहीं हैं तो यह संभवतः सार्थक हो सकता है। –

उत्तर

4

एक फ़ाइल अपलोड एप्लिकेशन के लिए मैंने लिखा, मुझे भी इस कार्यक्षमता की आवश्यकता है।this SO article पढ़ने के बाद, मैंने कुछ यादृच्छिक संख्याओं के साथ चिपकने का फैसला किया और जांच की कि वे डीबी में मौजूद हैं या नहीं।

तो आपका अपमान मेरे जैसा ही है।

2

ठीक है यूआरएल शॉर्टिंग से आपका क्या मतलब है?

बहुत अलग तकनीकें हैं। अधिकांश वेबसाइटें, AFAIK, किसी भी स्थिति पर यूआरएल में डाटाबेस प्राथमिक कुंजी (शायद कुछ एन्कोडेड) रूप में डालने के लिए तकनीक का उपयोग करती है, जहां इसे नियमित अभिव्यक्ति द्वारा पार्स किया जा सकता है और केवल बाकी कीवर्ड को बढ़ाया जा सकता है। अमेज़न से

उदाहरण: http://www.amazon.de/Bauknecht-WA-PLUS-614-Waschmaschine/dp/B003V1JDU8/

आप उत्पाद के नाम के स्थान पर कुछ भी दर्ज कर सकते हैं, केवल अंत में आईडी महत्वपूर्ण है।

हालांकि आप अपने लिंक को साफ रखने के और देखें कि क्या यह सही है और वास्तविक URL 301 अग्रेषण करते हैं या एक प्रामाणिक URL डाल अगर एक गलत URL जाता कर सकते हैं।

हालांकि:

आप TinyURL की तरह कुछ करना चाहते हैं, मेरा उत्तर एक निश्चित नहीं है।

यह पर्याप्त नहीं है।

अच्छा यह निर्भर करता है।

यह "सुरक्षित" नहीं है। यूआरएल अनुमान लगाना बहुत आसान होगा। एक बेहतर दृष्टिकोण कुछ क्रिप्टोग्राफिक फ़ंक्शन जैसे SHA-1/MD5 का उपयोग करेगा।

जब टकराव की बात आती है तो मैं वास्तव में नहीं बता सकता। GUID को कोई टकराव नहीं बनाया गया था, लेकिन आप केवल पहले 6 वर्णों का उपयोग कर रहे हैं। मुझे नहीं पता कि वे वास्तव में एल्गोरिदम में क्या प्रतिनिधित्व करते हैं। लेकिन यह निश्चित रूप से इष्टतम नहीं है।

क्यों, आप केवल डेटाबेस ऑटो वृद्धि प्राथमिक कुंजी का उपयोग नहीं करते हैं? यदि सुरक्षा महत्वपूर्ण है तो आप निश्चित रूप से 6 से अधिक वर्णों के साथ भी जाते हैं।

एक परियोजना मैं मैं

/डेटाबेस प्राथमिक कुंजी/हैश के- प्राथमिक कुंजी-साथ-कुछ-टोकन या क्लाइंट-जानकारी/

इस तरह की तरह कुछ इस्तेमाल किया किया था पर मैं सीधे डेटाबेस में प्राथमिक कुंजी देख सकता था जो सबसे तेज़ संभव तरीका था लेकिन यह भी सत्यापित कर सकता था कि लिंक हैश द्वारा मजबूर ब्रूट द्वारा नहीं मिला था। मेरे मामले में हैश क्लाइंट के गुप्त टोकन और प्राथमिक कुंजी का SHA-1 योग था।

+0

आपको लगता है कि यूआरएल अनुमान लगाना आसान क्यों होगा? मुझे ऐसा नहीं लगता। हैश फ़ंक्शन मुझे आवश्यकतानुसार बड़े आउटपुट का उत्पादन करते हैं, इसलिए फिर मुझे ट्रिम करना होगा। एक हैश डीबी प्राथमिक कुंजी ठीक हो सकती है, लेकिन यह आवश्यक नहीं है कि डेटाबेस के लिए इसका विकल्प हो। कुंजी-मूल्य स्टोर – Bozho

+0

URL URL के लिए नहीं है, तो कोई फर्क क्यों पड़ता है कि कोई यूआरएल अनुमान लगा सकता है? आखिरकार, उन्हें उस पृष्ठ पर रीडायरेक्ट किया जाना चाहिए, और एक्सेस या तो सार्वजनिक होगी (एक बोग मानक वेब पेज के लिए) या किसी अन्य माध्यम से प्रतिबंधित है। – Rob

+0

उपयोग केस @Rob पर निर्भर करता है। यदि हां, तो कोई भी हैशिंग क्यों न करें और केवल ऑटो वृद्धि का उपयोग न करें? मैं बस यह स्पष्ट करने की कोशिश कर रहा था कि प्रश्न में केस और आवश्यकताएं स्पष्ट नहीं हैं। –

संबंधित मुद्दे