تحويل HashBytes إلى VarChar في SQL Server: دليل كامل
عند العمل مع SQL Server، خصوصًا في مجال أمان البيانات وسلامتها، فإن توليد التجزئات يمكن أن يكون عملية حاسمة. ومع ذلك، فإن واحدة من القضايا الشائعة التي يواجهها المطورون هي طريقة تحويل ناتج دالة HashBytes
من VarBinary
إلى تنسيق VarChar
أكثر readability. ستمشيك هذه المدونة خلال هذه العملية التحويلية، مع التركيز تحديداً على تجزئات MD5.
المشكلة: فهم ناتج HashBytes
دعنا نبدأ بفهم المسألة المطروحة. في SQL Server، يتم استخدام دالة HashBytes
غالبًا لإنشاء قيمة تجزئة لسلسلة نصية. على سبيل المثال، اعتبر الأمر SQL التالي:
SELECT HashBytes('MD5', 'HelloWorld')
بينما يقوم هذا الأمر بشكل فعال بتوليد تجزئة MD5، فإن الناتج يكون بصيغة VarBinary، والتي تبدو كما يلي:
0x68E109F0F40CA72A15E05CC22786F8E6
التحدي
التحدي الرئيسي يظهر عندما تحاول تحويل الناتج VarBinary
مباشرة إلى VarChar
يمكن قراءته. إذا قمت بتحويله ببساطة، قد ينتهي بك المطاف إلى الحصول على أحرف غير منطقية بدلاً من سلسلة منسقة بشكل صحيح. على سبيل المثال، قد يؤدي محاولة تحويله إلى:
há ðô§*à\Â'†øæ
بدلاً من السلسلة اللوغاريتمية المتوقعة:
68E109F0F40CA72A15E05CC22786F8E6
الحل: التحويل إلى VarChar
لتحويل الناتج من HashBytes
إلى VarChar
بشكل صحيح، يمكنك استخدام مجموعة من الدوال المدمجة التي يوفرها SQL Server. إليك كيف يمكنك تحقيق ذلك:
تحويل خطوة بخطوة
-
استخدام دالة
HashBytes
: ابدأ بإنشاء تجزئة MD5 باستخدامHashBytes
. -
التحويل باستخدام
fn_varbintohexstr
: ستساعدك هذه الدالة على تحويل الناتج الثنائي إلى سلسلة هكساديسيمالية. -
استخراج الجزء الفرعي: أخيرًا، قم باستخراج الجزء ذي الصلة للحصول على التمثيل الهكساديسي النظيف.
إليك الأمر SQL الذي يحقق ذلك:
SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32)
تفصيل الأمر
-
HashBytes('MD5', 'HelloWorld')
: يقوم بتوليد تجزئة MD5 بصيغةVarBinary
. -
master.dbo.fn_varbintohexstr(...)
: يقوم بتحويل البيانات الثنائية إلى تمثيل سلسلة هكساديسيمالية المسبوقة بـ0x
. -
SUBSTRING(..., 3, 32)
: يستخرج السلسلة الهكساديسيمالية بدءًا من الحرف الثالث لاستبعاد بادئة0x
، حيث يلتقط الطول الصحيح.
الخاتمة
من خلال اتباع الطريقة المذكورة أعلاه، يمكنك تحويل ناتج HashBytes
من VarBinary
إلى تمثيل VarChar
يمكن قراءته. هذا لا يجعل ناتج التجزئة أكثر ملاءمة للمستخدم فحسب، بل يمكن أيضًا أن يسهل المقارنات والتحقق من السلامة في تطبيقات SQL Server الخاصة بك.
إذا وجدت هذا الدليل مفيدًا، فلا تتردد في مشاركته مع زملائك أو إعادة زيارته كمرجع سريع في المستقبل!