পাইথন ব্যবহার করে স্ট্রিংয়ের MD5 যোগফল কীভাবে পাবেন?


262

ইন ফ্লিকার এপিআই ডক্স , আপনি একটি স্ট্রিং এর MD5 সমষ্টি জেনারেট করতে বের করতে হবে [api_sig]মান।

একটি স্ট্রিং থেকে এমডি 5 যোগ উত্পাদন সম্পর্কে কীভাবে যায়?

ফ্লিকার উদাহরণ:

স্ট্রিং: 000005fab4534d05api_key9a0554259914a86fb9e7eb014e4e5d52permswrite

MD5 যোগফল: a02506b31c1cd46c2e0b6380fb94eb3d

উত্তর:


252

পাইথন ২.x এর জন্য পাইথনের হ্যাশলিব ব্যবহার করুন

import hashlib
m = hashlib.md5()
m.update("000005fab4534d05api_key9a0554259914a86fb9e7eb014e4e5d52permswrite")
print m.hexdigest()

আউটপুট: a02506b31c1cd46c2e0b6380fb94eb3d


77
ব্যবহার করার চেষ্টা করবেন না hashlib.md5().update('your string').hexdigest(), কোনওটি update()ফেরত দেওয়ার পরে এটি কাজ করবে না । আপনি যদি ওয়ান লাইনের সমাধান চান তবে মার্ক লংগায়ারের উত্তরটি ব্যবহার করুন।
ক্রিস্টোফার ম্যানিং

@ ক্রিস্টোফারম্যানিং এম.হেক্সডিজেস্ট () একটি 32 অক্ষর দীর্ঘ ডাইজেস্ট ফিরিয়ে দেয় returns কিভাবে একটি 16 অক্ষর দীর্ঘ ডাইজেস্ট পেতে?
আদিল মালিক

@ দরবেশ এটি 32 টি অক্ষর কারণ এটি হেক্স উপস্থাপনা, m.digest_sizeএই কোডের উপরে একটি কাজ করুন, অভ্যন্তরীণ ডাইজেস্ট ইতিমধ্যে 16 বাইট is
বারিস ডেমিরে

1
@ দরবেশ আপনি কেবল স্ট্রিং টুকরো টুকরো করতে পারেনm.hexdigest()[:16]
ফেডেরজি

@ দরবেশ আরএফসি 1321 অনুসারে , এমডি 5 সর্বদা 16 বাইট হয়। আপনি যদি কেবলমাত্র 16 টি অক্ষরের দীর্ঘ ডাইজেস্ট চান তবে বারিস ডেমিরায় যেমন বলেছিলেন আপনি স্লাইসটি করতে পারেন।
রায়ান

569

আপনি নিম্নলিখিতটি করতে পারেন:

পাইথন 2.x

import hashlib
print hashlib.md5("whatever your string is").hexdigest()

পাইথন 3.x

import hashlib
print(hashlib.md5("whatever your string is".encode('utf-8')).hexdigest())

তবে এক্ষেত্রে আপনি সম্ভবত ফ্লিকার এপিআইয়ের সাথে আলাপচারিতার জন্য এই সহায়ক পাইথন মডিউলটি ব্যবহার করার চেয়ে আরও ভাল:

... যা আপনার জন্য প্রমাণীকরণের সাথে কাজ করবে।

হ্যাশলিবের অফিসিয়াল ডকুমেন্টেশন


আমি এপিআই দেখেছি। আমি কীভাবে তা কীভাবে এটি করতে পারি তা জানতে আগ্রহী ছিলাম। ধন্যবাদ!
9

1
hexdigest () একটি 32 অক্ষর দীর্ঘ ডাইজেস্ট ফিরিয়ে দেয়। কিভাবে একটি 16 অক্ষর দীর্ঘ ডাইজেস্ট পেতে?
আদিল মালিক

2
চমৎকার উত্তর! আমি জিজ্ঞাসা করতে পারি পাইথন 2 এ কেন আমাদের utf-8 এনকোডিং করার দরকার নেই, তবে পাইথন 3 এ আমাদের এনকোডিং করা দরকার। ধন্যবাদ। @ মার্ক লংগায়ার
জেফ হু

3
@ জেফহু, কারণ বাইটস-মতো-অবজেক্টটিhashlib.md5 প্রত্যাশা করেছে
ম্যাক্সইউ 25'18

1
পাইথন 3 সংস্করণটি পাইথন 2 তেও ব্যবহার করা উচিত। @ জেফহু @ ম্যাক্সইউ যা বলেছে তার প্রসারিত করে, এমডি 5 ফাংশনটি বাইস্ট্রেটিং নেয় এবং ইউনিকোড গ্রহণ করে না। পাইথন 3 হ'ল (সঠিকভাবে) কঠোর / সুস্পষ্ট, এবং তাই একটি str ( "") ইউনিকোড এবং বাইস্টেরিং এ এনকোড করতে হয়। পাইথন 2 এর স্ট্রিংগুলিকে বিটিস্ট্রিং বা ইউনিকোড স্ট্রিং হিসাবে ব্যাখ্যা করা যেতে পারে এবং ""স্ট্রিং ( ) স্ট্রিংকে পাস করা বাইটস্ট্রিং হিসাবে ব্যাখ্যা করা হয় । যদি স্ট্রিংটিতে ইউনিকোড অক্ষর থাকে তবে এটি একটি ব্যতিক্রম বাড়িয়ে তুলবে। বাইস্টেরিংয়ের এনকোডিংয়ের ফলে আসকি অক্ষরগুলি ছোঁয়া যাবে এবং ইউনিকোডটি সঠিকভাবে রূপান্তরিত হবে
চার্লস এল।

11

আপনি কি হ্যাশলিবে এমডি 5 বাস্তবায়ন ব্যবহার করার চেষ্টা করেছেন ? মনে রাখবেন যে হ্যাশিং অ্যালগরিদমগুলি সাধারণত পাঠ্য ডেটার পরিবর্তে বাইনারি ডেটাতে কাজ করে , সুতরাং আপনি হ্যাশ করার আগে কোন অক্ষর এনকোডিংটি পাঠ্য থেকে বাইনারি ডেটাতে রূপান্তর করতে ব্যবহৃত হয় সে সম্পর্কে যত্নবান হতে পারেন।

ফলাফলের একটি হ্যাশ এর আরো বাইনারি ডেটা - এটা দেখে মনে হচ্ছে ফ্লিকার উদাহরণ তারপর হেক্স এনকোডিং ব্যবহার করে পাঠ্য রূপান্তরিত হয়েছে। এটি hexdigestপেতে হ্যাশলিবে ফাংশনটি ব্যবহার করুন ।


hexdigest () একটি 32 অক্ষর দীর্ঘ ডাইজেস্ট ফিরিয়ে দেয়। কিভাবে একটি 16 অক্ষর দীর্ঘ ডাইজেস্ট পেতে?
আদিল মালিক

1
@ দরবেশ: আচ্ছা হ্যাঁ, এমডি 5 টি 128 বিট, যা হেক্সের 32 টি অক্ষর। আপনি যদি একটি ছোট ডাইজেস্ট চান তবে আপনার একটি 64-বিট ডাইজেস্ট দরকার need যদিও এটি বেশ দুর্বল হবে ...
জন স্কিটি



0

আপনি চেষ্টা করতে পারেন

#python3
import hashlib
rawdata = "put your data here"
sha = hashlib.sha256(str(rawdata).encode("utf-8")).hexdigest() #For Sha256 hash
print(sha)
mdpass = hashlib.md5(str(sha).encode("utf-8")).hexdigest() #For MD5 hash
print(mdpass)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.