যে কোনও উপায়ে আমি নিজেই কোনও অ্যালগোরিদম বাস্তবায়ন না করে 8 টি সংখ্যায় একটি এলোমেলো স্ট্রিং হ্যাশ করতে পারি?
যে কোনও উপায়ে আমি নিজেই কোনও অ্যালগোরিদম বাস্তবায়ন না করে 8 টি সংখ্যায় একটি এলোমেলো স্ট্রিং হ্যাশ করতে পারি?
উত্তর:
হ্যাঁ, আপনি অন্তর্নির্মিত হ্যাশলিব মডিউল বা বিল্ট-ইন হ্যাশ ফাংশন ব্যবহার করতে পারেন । তারপরে, মডুলো অপারেশন বা স্ট্রিং স্লাইসিং ক্রিয়াকলাপগুলি হ্যাশের পূর্ণসংখ্যা আকারে ব্যবহার করে শেষ আটটি সংখ্যা কেটে ফেলুন:
>>> s = 'she sells sea shells by the sea shore'
>>> # Use hashlib
>>> import hashlib
>>> int(hashlib.sha1(s).hexdigest(), 16) % (10 ** 8)
58097614L
>>> # Use hash()
>>> abs(hash(s)) % (10 ** 8)
82148974
পাইথন 2 এর জন্য রেমন্ডের উত্তর দুর্দান্ত (যদিও আপনাকে অ্যাবস () বা 10 ** 8 এর কাছাকাছি প্যারেন্সের দরকার নেই)। যাইহোক, পাইথন 3 এর জন্য, এখানে গুরুত্বপূর্ণ সতর্কতা রয়েছে। প্রথমত, আপনাকে নিশ্চিত করতে হবে যে আপনি কোনও এনকোডযুক্ত স্ট্রিংটি পার করছেন। এই দিনগুলিতে, বেশিরভাগ পরিস্থিতিতে শ -১ থেকে দূরে সরে যাওয়ার পরিবর্তে শ -২ 25 like এর মতো কিছু ব্যবহার করা আরও ভাল। সুতরাং, হ্যাশলিব পদ্ধতিটি হ'ল:
>>> import hashlib
>>> s = 'your string'
>>> int(hashlib.sha256(s.encode('utf-8')).hexdigest(), 16) % 10**8
80262417
আপনি যদি পরিবর্তে হ্যাশ () ফাংশনটি ব্যবহার করতে চান তবে গুরুত্বপূর্ণ সতর্কতাটি হ'ল পাইথন ২.x এর থেকে পৃথক পাইথন ৩.x এর মধ্যে, হ্যাশ () এর ফলাফলটি কেবলমাত্র একটি প্রক্রিয়ার মধ্যেই সামঞ্জস্যপূর্ণ হবে, পাইথন ডাকে না across এখানে দেখো:
$ python -V
Python 2.7.5
$ python -c 'print(hash("foo"))'
-4177197833195190597
$ python -c 'print(hash("foo"))'
-4177197833195190597
$ python3 -V
Python 3.4.2
$ python3 -c 'print(hash("foo"))'
5790391865899772265
$ python3 -c 'print(hash("foo"))'
-8152690834165248934
এর অর্থ হ্যাশ () - ভিত্তিক সমাধান প্রস্তাবিত, যা কেবল সংক্ষিপ্ত করা যেতে পারে:
hash(s) % 10**8
প্রদত্ত স্ক্রিপ্ট রানের মধ্যে কেবল একই মানটি প্রদান করবে:
#Python 2:
$ python2 -c 's="your string"; print(hash(s) % 10**8)'
52304543
$ python2 -c 's="your string"; print(hash(s) % 10**8)'
52304543
#Python 3:
$ python3 -c 's="your string"; print(hash(s) % 10**8)'
12954124
$ python3 -c 's="your string"; print(hash(s) % 10**8)'
32065451
সুতরাং, আপনার অ্যাপ্লিকেশনটির ক্ষেত্রে এটি (যদি তা আমার ক্ষেত্রে ঘটে) এর উপর নির্ভর করে আপনি সম্ভবত হ্যাশলিব ভিত্তিক পদ্ধতির সাথে লেগে থাকতে চাইবেন।
hashlib.sha256("hello world".encode('utf-8')).hexdigest()[:8]
ডাইনি ব্যবহার করতে পারেন তারপরেও সংঘর্ষ হবে
জেজেসি উত্তরটি সম্পূর্ণ করতে, অজগর 3.5.3 এ আপনি যদি এইভাবে হ্যাশলিব ব্যবহার করেন তবে আচরণটি সঠিক:
$ python3 -c '
import hashlib
hash_object = hashlib.sha256(b"Caroline")
hex_dig = hash_object.hexdigest()
print(hex_dig)
'
739061d73d65dcdeb755aa28da4fea16a02b9c99b4c2735f2ebfa016f3e7fded
$ python3 -c '
import hashlib
hash_object = hashlib.sha256(b"Caroline")
hex_dig = hash_object.hexdigest()
print(hex_dig)
'
739061d73d65dcdeb755aa28da4fea16a02b9c99b4c2735f2ebfa016f3e7fded
$ python3 -V
Python 3.5.3
@ রেইমন্ড হেট্টিংগার দ্বারা প্রয়োগ করা সমাধানের নোডেজ বাস্তবায়নটি আমি ভাগ করে নিচ্ছি।
var crypto = require('crypto');
var s = 'she sells sea shells by the sea shore';
console.log(BigInt('0x' + crypto.createHash('sha1').update(s).digest('hex'))%(10n ** 8n));