32-बिट यादृच्छिक मैपिंग फ़ंक्शन

मैं एक फ़ंक्शन f ढूंढ रहा हूं जो 32-बिट पूर्णांक को दूसरे में मैप करता है। समारोह bijective होना चाहिए, और हालांकि मैपिंग लगभग यादृच्छिक दिखना चाहिए, यह क्रिप्टोग्राफ़िक रूप से सुरक्षित होने के लिए नहीं आवश्यक है। एक महत्वपूर्ण अतिरिक्त आवश्यकता है: g के विपरीत एक आसानी से गणना योग्य फ़ंक्शन g भी होना चाहिए। g के लिए f जैसा होना आवश्यक है, हालांकि यह आवश्यक नहीं है।

0
सुनिश्चित नहीं है कि यह इस तरह के प्रश्न के लिए सही जगह है, लेकिन xor कोशिश करें
जोड़ा लेखक Ilya Bursov, स्रोत
भले ही इसे क्रिप्टोग्राफ़िक रूप से सुरक्षित होने की आवश्यकता न हो, फिर भी 32 बिट ब्लॉक साइफर का उपयोग करने में कुछ गड़बड़ है?
जोड़ा लेखक Thomas M. DuBuisson, स्रोत
कुछ randombit.net/bitbashing/2009/07/21/… (जो नहीं क्रिप्टोग्राफ़िक रूप से सुरक्षित है!)
जोड़ा लेखक loreb, स्रोत

2 उत्तर

गैर-क्रिप्टोग्राफिक आवश्यकता के कई विकल्प दिए गए हैं, जिनमें निम्न शामिल हैं:

  • एक्सओआर (इलिया द्वारा उल्लिखित)
  • बिट रोटेशन (एफ: दाईं ओर एन बिट्स घुमाएं, जी: बाईं ओर एन बिट्स घुमाएं)
  • अतिरिक्त/घटाव (अतिप्रवाह जांच के बिना, ताकि int.MaxValue + 1 int int.MinValue और int.MinValue - int.MaxValue के लिए 1 मानचित्र)
  • एक सिफर ब्लॉक करें (अच्छी कॉल @ थॉमस, मैं आसान लोगों पर केंद्रित था: - )
3
जोड़ा
बहुत कम 32 बिट ब्लॉक-सिफर हैं। एक Skip32 है
जोड़ा लेखक CodesInChaos, स्रोत
साइमन और स्पीक ब्लॉक सिफर में 32 बिट वेरिएंट भी हैं।
जोड़ा लेखक Thomas M. DuBuisson, स्रोत

इस बीच मुझे अपनी समस्या का एक आदर्श समाधान मिला है: एक रैखिक संगत जनरेटर का उपयोग करें। वे आसानी से उलटा हो जाते हैं और क्रमपरिवर्तन मेरी आवश्यकताओं के लिए पर्याप्त रूप से यादृच्छिक दिखता है।

0
जोड़ा