2008-10-13 10 views
7

उत्पन्न करें इसलिए मुझे एक कोड उत्पन्न करने की आवश्यकता है जिसे किसी विशिष्ट उपयोगकर्ता/संभावना से बंधे जा सकने वाले डॉलर की राशि के साथ जोड़ा जा सके। इसे उलटा करने की जरूरत है ताकि ग्राहक आवेदन कोड की वैधता की पुष्टि कर सके और एक प्रबंधक का छूट लागू कर सके।उपयोगकर्ता विशिष्ट 1 टाइम कूपन कोड

मैं जितना संभव हो सके कोड को कम करना चाहता हूं लेकिन इसे अच्छी तरह से खराब करने की आवश्यकता है ताकि विक्रेता अपने साथ गड़बड़ शुरू नहीं कर सकें।

मैं अपने आप को कुछ संख्याओं के साथ उछाल सकता हूं, पीआई द्वारा विभाजित कर रहा हूं और हेक्स और व्हाट्नॉट में परिवर्तित हो सकता हूं लेकिन मैं वास्तव में समुदाय से विचारों या सर्वोत्तम प्रथाओं में रूचि रखता हूं।

मैं इसे सी # में कर रहा हूं लेकिन मुझे उम्मीद है कि किसी भी भाषा से तरीकों का अनुवाद किया जा सकता है।

संपादित करें: स्पष्ट करने के लिए। मैं समय से पहले इस सामान को स्टोर नहीं कर सकता, कोड को फ्लाई पर बनाया जाना चाहिए और उनके साथ सारी जानकारी लेना है।

उदाहरण के लिए। सेल्समैन 14 क्लाइंट 773 के बारे में कॉल करता है और उन्हें अपने आदेश से 500 डॉलर देना चाहता है। 14, 773 और 500 कूपन कोड में होना चाहिए और कोड में विक्रेता कुंजी के बाद क्लाइंट ऐप में निकाला जा सकता है।

+0

आप यहाँ प्रोटोकॉल स्पष्ट कर सकता है? ऐसा लगता है कि आपके पास कई पार्टियां हैं, एक विक्रेता एस, एक ग्राहक (ग्राहक?) सी, एक केंद्रीय डेटाबेस डी, और एक क्लाइंट एप्लिकेशन ए। कौन बात करता है और किस क्रम में, और कौन सी पार्टी बताती है कि कौन सी दूसरी पार्टी ? इसके बिना आपके प्रश्न का उत्तर देना मुश्किल है। –

उत्तर

7

हस्ताक्षर करने के लिए सार्वजनिक/निजी कुंजी जोड़ी उत्पन्न करें। निजी कुंजी का उपयोग कर उपयोगकर्ता आईडी और कूपन मान के संयोजन पर डिजिटली हस्ताक्षर करें। कूपन मान + हस्ताक्षर कूपन कोड के रूप में प्रकाशित करें, उदाहरण के लिए, अक्षरों और संख्याओं का उपयोग करके। क्लाइंट एप्लिकेशन मूल रूप से हस्ताक्षरित डेटा के संयोजन को पुनर्निर्मित करके कोड सत्यापित करेगा (उदाहरण के लिए, उपयोगकर्ता आईडी को कूपन मान में प्रीपेड करें) और उसके बाद डिजिटल हस्ताक्षर सत्यापित करना।

+0

नोट: आपको अभी भी बिक्री रिपोर्ट के अंक रखना होगा कि कूपन का उपयोग दो बार उपयोग किए जाने वाले कूपन के जोखिम को कम करने के लिए काफी बार किया जाता है। – Neall

+0

निश्चित रूप से, यह सुनिश्चित करना कि एक कूपन कोड केवल एक बार पाठक के अभ्यास के रूप में उपयोग किया जाता है। साथ ही, हस्ताक्षरित डेटा को और जानकारी शामिल करने की आवश्यकता है, ताकि एक ही मूल्य के लिए और उसी ग्राहक + बिक्री प्रतिनिधि संयोजन के लिए कई कूपन जारी करना संभव हो। – Alexander

+0

अधिक जानकारी के लिए, http://en.wikipedia.org/wiki/Public-key_cryptography और Google खोज उपयोगी हैं। – ICR

2

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

+0

देश (जैसे स्विट्जरलैंड) हैं, जहां कानून कूपन कभी समाप्त नहीं होते हैं (भले ही वे आमतौर पर कूपन पर मुद्रित समाप्ति तिथि हो)। इशारा तिथि को समाप्ति तिथि से बदलें। –

+0

मुझे यह जवाब पसंद है क्योंकि यह क्रिप्टोग्राफी पर निर्भर सभी अन्य उत्तरों के लिए एक अच्छा विकल्प प्रदान करता है। इस समाधान के बारे में ध्यान देने योग्य एकमात्र चीज यह है कि आप ऑफ़लाइन मोड में कूपन कोड सत्यापित नहीं कर सकते हैं। – Alexander

+0

छोटे कूपन कोड की ओर अग्रसर थोड़ा हल्का समाधान, पूरी तरह से यादृच्छिक शॉर्ट कूपन आईडी (उदाहरण के लिए, 8 अल्फान्यूमेरिक अंक लंबा) उत्पन्न करना है, उन्हें कूपन के बारे में सभी प्रासंगिक जानकारी के साथ डेटाबेस में स्टोर करें, जैसे कि ग्राहक आईडी, प्रतिनिधि आईडी , कूपन मूल्य, समाप्ति ... – Alexander

2

आपके विक्रेता (या महिलाएं) कितने चालाक हैं? क्या आप केवल 64 एन्कोड मूल्य का आधार बना सकते हैं?

कैसे एनकोड और डीकोड base64 करने के लिए यहाँ देखें:

http://arcanecode.wordpress.com/2007/03/21/encoding-strings-to-base64-in-c/

उसके अलावा मैं तुम्हें और क्लाइंट अनुप्रयोग से जाना जाता है एक कुंजी के साथ मूल्य एन्क्रिप्ट जाएगा।

+0

वे कई बार आश्चर्यजनक रूप से चालाक हैं। esp जब उनके कमीशन पर सवारी कर रहा है। – Echostorm

+0

फिर एन्क्रिप्शन जाने का रास्ता है, ट्रेब का सुझाव काम करेगा। – Arry

5

एसिमेट्रिक एन्क्रिप्शन के मामले की तरह लगता है। आप सभी को सार्वजनिक कुंजी दे सकते हैं, इस प्रकार उन्हें कूपन को प्रमाणित करने के लिए जानकारी प्रदान कर सकते हैं, लेकिन एक कपोन बनाने की क्षमता निजी कुंजी (= आप) के मालिक के साथ आराम करेगी।

मैं एक कूपन क्लास बनाउंगा जो xml को क्रमबद्ध करता है, और फिर xml स्ट्रिंग को एन्क्रिप्ट करता है। प्रमाणीकरण स्ट्रिंग को डिक्रिप्ट करना होगा और देखें कि यह वैध xml है (मैं अनुशंसा करता हूं कि ऑब्जेक्ट को पहले बिना जांच के बेकार करें)।

1

मैं तुम्हें सवाल आप नहीं है एक डेटाबेस में कोड संग्रहीत करना चाहते हैं (यदि तुमने किया था, तो आप बस डेटाबेस के खिलाफ एक कोड सत्यापित कर सकता)

तो phrased किए जाने के तरीके से अनुमान लगा रहा हूँ, क्या आप कूपन में क्या है इसके बारे में सभी प्रासंगिक जानकारी ले सकते हैं, फिर छेड़छाड़ को रोकने के लिए इसे एक गुप्त नमक के साथ मिलकर हैश करें।

इस प्रकार, आप 2671519131e974ee6fc746151e98f4a8, इस प्रकार पूरा कोड प्राप्त करने के उपयोगकर्ता 23 $ 200 के लायक है, तो आप "23_200" इस तरह की स्ट्रिंग का निर्माण हो सकता है, और "BillTheLizard" की एक गुप्त नमक के साथ एक MD5 हैश की गणना के लिए एक कूपन चाहता था मान लीजिए आप देना ग्राहक 200_23_2671519131e974ee6fc746151e98f4a8

है अब जब आप कोड प्राप्त किया, आप इसे तोड़, और जाँच लें कि md5 ("200_23" + गुप्त) = मूल्य

संपादित करें सत्यापित करने के लिए 2671519131e974ee6fc746151e98f4a8: एक 32 चरित्र हैश हैं बहुत लंबा है, आप हमेशा इसे छोटा कर सकते हैं, उदाहरण के लिए इसे 8 वर्णों तक गिराने से आपको 42 9 4 9 672 9 6 विभिन्न हैश मूल्य मिलेंगे।

+0

मेरे अनुभव में, (बिक्री) लोग व्यक्तिगत लाभ के लिए ऐसी प्रणाली के साथ छेड़छाड़ करने के लिए काफी समय तक जाएंगे। उदाहरण के लिए, वे क्लाइंट एप्लिकेशन से गुप्त नमक खोजने के लिए किसी को किराए पर लेंगे। असममित क्रिप्टोग्राफी इस परिदृश्य में थोड़ा अधिक विश्वसनीय है। – Alexander

+0

एमडी 5 संदेश-विस्तार हमलों के लिए कमजोर है: ऐसे तरीके हैं जहां विक्रेता कूपन डेटा को ऐसे तरीके से संशोधित कर सकता है जो परिणामी हैश को नहीं बदलेगा ताकि वह कूपन ले सके और अन्य समान दिखने वाले लोगों को उत्पन्न कर सके जो अभी भी मान्य हैं। जो भी आप सुझा रहे हैं, उसे करने का सुरक्षित तरीका मौजूदा [संदेश प्रमाणीकरण कोड] (https://en.wikipedia.org/wiki/Message_authentication_code) तकनीक का उपयोग करने के बजाय स्वयं का निर्माण करना है। एक संभावना जो व्यापक रूप से उपलब्ध है [एचएमएसी] (https://en.wikipedia.org/wiki/HMAC) है। – hugomg

1

यह अभी तक उत्तरों को पूरा करने के लिए है।

  1. केंद्रीकृत समाधान: प्रत्येक कूपन के बारे में जानकारी अपने डेटाबेस में संग्रहीत किया जाता है ऐसे कूपन कोड जनरेट करने के दो मुख्य अलग तरीके हैं। कूपन कोड को यादृच्छिक रूप से जेनरेट और छोटा किया जा सकता है - यह केवल आपके डेटाबेस में एक रिकॉर्ड का संदर्भ है जिसमें कूपन मान, ग्राहक आईडी, प्रतिनिधि आईडी जैसी सभी आवश्यक जानकारी शामिल हैं। ऐसे कोड को सत्यापित करने के लिए आपके सर्वर पर ऑनलाइन पहुंच की आवश्यकता है।

  2. विकेंद्रीकृत समाधान: कूपन जानकारी का एक स्टैंडअलोन टुकड़ा है जिसे आपके किसी भी सर्वर तक पहुंच के बिना ऑफ़लाइन मोड में सत्यापित किया जा सकता है। नतीजतन, कूपन कोड में जानकारी के कुछ (या यहां तक ​​कि सभी) शामिल होना चाहिए। सबसे सुरक्षित तरीका असममित क्रिप्टोग्राफी या Message Authentication Code का उपयोग करना है ताकि निजी कुंजी (आप) धारक के अलावा कोई भी कूपन उत्पन्न नहीं कर सके।

1

स्टीव गिब्सन ने अपनी वेबसाइट पर के बारे में एक बार पासवर्ड में बात करती है, लेकिन वहाँ कोई कारण नहीं क्यों आप एक समय कूपन कोड बनाने के लिए इसका इस्तेमाल नहीं कर सकते हैं: http://grc.com/ppp

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