হ্যাশবাইটসকে ভারচরে রূপান্তর করুন


127

আমি এসকিউএল সার্ভার 2005-এ স্ট্রিং মানের MD5 হ্যাশ পেতে চাই I আমি নিম্নলিখিত কমান্ডটি দিয়ে এটি করছি:

SELECT HashBytes('MD5', 'HelloWorld')

যাইহোক, এটি একটি ভারচিনি মান পরিবর্তে একটি ভারবাইনারি প্রদান করে। আমি যদি 0x68E109F0F40CA72A15E05CC22786F8E6কোনও ভারচারে রূপান্তরিত করার চেষ্টা করি তবে আমি há ðô§*à\Â'†øæতার পরিবর্তে পাই 68E109F0F40CA72A15E05CC22786F8E6

এসকিউএল-ভিত্তিক কোনও সমাধান আছে কি?

হ্যাঁ

উত্তর:


147

আমি সমাধানটি অন্য কোথায় খুঁজে পেয়েছি:

SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32)

19
fn_varbintohexstr ডকুমেন্টেড ফাংশন নয়।
কনভার্ট

আমি গুদামে আপডেটের জন্য একটি উপায় প্রয়োজন হিসাবে ভেরিবিনারি দ্বারা কিছুটা পেয়েছিলাম। এটা চমত্কার ভাবে কাজ করেছে! ধন্যবাদ ...
nitefrog

এই পদ্ধতিটি খুব ধীর, একটি অননুমোদিত ফাংশন ব্যবহার করে এবং আজুরেতে কাজ করে না। ভালো না. পরিবর্তে রূপান্তর ব্যবহার করুন!
রক্লান

4
কনভার্ট () এসকিউএল 2005-এ কাজ করে না you're দুঃখজনকভাবে আমি কোনও একক কমান্ড সম্পর্কে অবগত নই যা সমস্ত এসকিউএল সংস্করণগুলির জন্য কাজ করবে, সুতরাং হয় আপনার স্ক্রিপ্টে কিছু ক্রেজি সংস্করণ চেক করুন, বা কোথাও একটি নোট করুন যাতে আপনি এসকিউএল সংস্করণগুলি আপগ্রেড করেন তবে আপনাকে ফাংশনটি ঠিক করতে হবে।
কার্ল বুসেমা

5
কনভার্ট (চর, @ মান, ২) কেবল 32 বাইট আউটপুট দেয় - আপনি যদি কোনও শ 1 হ্যাশটি করেন তবে আপনি এটি কেটে ফেলবেন, উপযুক্ত আউটপুট রাখতে আপনার রূপান্তর (চার (48), @ মান, 2) প্রয়োজন।
অ্যান্ড্রু হিল

82
SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'Hello World'),2)

4
এটি এসকিউএল অ্যাজুরেতে কাজ করে। SHA1 এর জন্য: নির্বাচন কনভার্ট (ভর্চার (40), হ্যাশবাইটস ('SHA1', 'হ্যালো ওয়ার্ল্ড'), ২)
র‌্যাটার

4
অকারণে এনভারচার ব্যবহার করার দরকার নেই।
ইয়ান কেম্প

3
প্রশ্নে এসকিউএল সার্ভার 2005-এ বলা হয়েছে এবং যদি আপনি এটিতে উপরের পরামর্শগুলির মধ্যে (এবং সম্ভবত অন্য কোনও সংস্করণও) করেন তবে তারা যা চাওয়া হয়েছে তা করে না। বাইটস সমতুল্য যে কোনও চরিত্রের জন্য আপনি পান, হেক্স স্ট্রিং হিসাবে বাইটগুলি নয় যা জিজ্ঞাসা করা হয়। গেটকিলার এবং জারক্রন সেই কাজের উত্তর দেয়।
ডেভিড নাইট

এই রূপান্তর শৈলীগুলি সম্পর্কে আমি কোথায় পড়তে পারি? 2 এই ক্ষেত্রে যা প্যারামিটার হিসাবে পাস করা হয়েছে হবে। এবং সি # কোডে এর সমতুল্য কীভাবে করবেন? আমার কোন এনকোডিং চয়ন করা উচিত?
Dmytro Zhluktenko

31

master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0)পরিবর্তে master.dbo.fn_varbintohexstrএবং তারপরে substringingফলাফলটি ব্যবহার করুন ।

আসলে অভ্যন্তরীণ fn_varbintohexstrকল fn_varbintohexsubstring। প্রথম যুক্তি fn_varbintohexsubstringবলা হয়েছে যে সব যোগ করার জন্য 0xFউপসর্গ হিসাবে বা না। fn_varbintohexstrকল fn_varbintohexsubstringসঙ্গে 1প্রথম আর্গুমেন্ট internaly হিসাবে।

আপনার প্রয়োজন নেই 0xFবলে fn_varbintohexsubstringসরাসরি কল করুন ।


27

ডেভিড নাইট যা বলেছেন তার বিপরীতে , এই দুটি বিকল্প এমএস এসকিউএল ২০০৮ এ একই প্রতিক্রিয়া ফিরিয়ে দেয়:

SELECT CONVERT(VARCHAR(32),HashBytes('MD5', 'Hello World'),2)
SELECT UPPER(master.dbo.fn_varbintohexsubstring(0, HashBytes('MD5', 'Hello World'), 1, 0))

সুতরাং দেখে মনে হচ্ছে প্রথম সংস্করণ ২০০৮ থেকে শুরু করে একটি ভাল পছন্দ।


ভুল করে এটিকে টাইপ করবেন না যা একেবারে পৃথক উত্তর দেয়! ... রূপান্তর (বার্চার, হ্যাশবাইটস ('এমডি 5', 'হ্যালো ওয়ার্ল্ড')), ২)
এন্ড্রু প্যাট

13
convert(varchar(34), HASHBYTES('MD5','Hello World'),1)

(হেক্সাডেসিমালকে স্ট্রিংয়ে রূপান্তর করার জন্য 1)

এটিকে নিম্নে রূপান্তর করুন এবং স্ট্রিংয়ের শুরু থেকে 0x কে সাবস্ট্রিংয়ের মাধ্যমে সরান:

substring(lower(convert(varchar(34), HASHBYTES('MD5','Hello World'),1)),3,32)

বাইটগুলিকে স্ট্রিংয়ে রূপান্তর করার পরে আমরা সি # তে যা পাই ঠিক তার সমান


2

কোনও স্টোর পদ্ধতিতে নিম্নলিখিত কোডটি ব্যবহারের ব্যক্তিগত অভিজ্ঞতার সাথে যা একটি এসপি ভেরিয়েবলকে হ্যাশ করে দিয়েছি আমি নিশ্চিত করতে পারি, অনির্ধারিত হলেও এই সংমিশ্রণটি আমার উদাহরণ অনুসারে 100% কাজ করে:

@var=SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA2_512', @SPvar)), 3, 128)

-3

ডেটাটাইপটি ভেরিবিনিতে পরিবর্তন করা আমার পক্ষে সবচেয়ে ভাল কাজ করে বলে মনে হচ্ছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.