طبقة Messagedigest
يوفر فئة MessagedIgest للتطبيقات وظائف خوارزميات هضم المعلومات ، مثل خوارزميات MD5 أو SHA. يعد Digest المعلومات وظيفة تجزئة آمنة في اتجاه واحد تتلقى بيانات من أي حجم وتخرج قيمة تجزئة ذات طول ثابت.
يبدأ كائن MessagedIgest في تهيئته. يعالج هذا الكائن البيانات باستخدام طريقة التحديث (). يمكنك استدعاء طريقة Reset () في أي وقت لإعادة تعيين الملخص. بمجرد تحديث جميع البيانات التي تحتاج إلى تحديث ، ينبغي استدعاء إحدى طرق Digest () لإكمال حساب التجزئة.
لا يمكن استدعاء طريقة Digest إلا مرة واحدة للحصول على كمية معينة من بيانات التحديث. بعد استدعاء Digest ، يتم إعادة تعيين كائن MessagedIgest إلى حالته الأولية.
يوضح:
في الموقع ، من أجل حماية معلومات الخصوصية مثل اسم المستخدم وكلمة المرور لعضو الموقع ، نقوم بتشفيرها مباشرة بطرق MD5 أو طرق أخرى عند التسجيل. حتى مسؤول قاعدة البيانات لا يمكنه عرض كلمة مرور العضو والمعلومات الأخرى. تأثير كلمة المرور في قاعدة البيانات مثل: 8E830882F03B2CB84D1A657F346DD41A تأثير.
نظرًا لأن خوارزمية MD5 لا رجعة فيها ، فهي تستخدم على نطاق واسع من قبل العديد من المواقع.
ثلاث طرق تشفير شائعة الاستخدام
الطريقة 1: استخدم عوامل البتات لتحويل البيانات المشفرة إلى الطريقة السداسية 2: استخدم طريقة التنسيق لتحويل البيانات المشفرة إلى سداسي عشري (موصى بها)
الطريقة 3: استخدم الخوارزمية لتحويل البيانات المشفرة إلى سداسي عشري
import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/** * Use the MessageDigest class that comes with Java* @author xiaokui */public class EncryptionUtil {/** * Since MD5 and SHA-1 both developed from MD4, their structure and strength characteristics have many similarities* The biggest difference between SHA-1 and MD5 is that its Digest هو 32 بت أطول من MD5 Digest (1byte = 8bit ، أي ما يعادل 4Bytes طويلة ، 8 أحرف أكثر من MD5 بعد التحويل إلى سداسي عشري). * بالنسبة للهجمات القسرية ، فإن MD5 هي عملية لترتيب 2128 و SHA-1 هي عملية من أجل 2160. * لذلك ، SHA-1 أقوى ضد الهجمات القسرية. ومع ذلك ، نظرًا لأن SHA-1 لديه خطوات دورة أكثر من MD5 (80:64) وأن ذاكرة التخزين المؤقت التي سيتم معالجتها أكبر (160 بت: 128 بت) ، يمتد SHA-1 ببطء من MD5. * * @Param Source String التي يجب تشفيرها * param hashtype type (md5 و sha) * @return */public static string gethash (مصدر السلسلة ، سلسلة hashtype) {// الأحرف المستخدمة لتحويل البواغ إلى hexdigits [] = {0 '،' 1 '،' 2 '،' '،' ، '،' ، '،' ، '،' ، '، "8 '،' 9 '،' a '،' b '،' c '،' d '،' e '،' f '} ؛ جرب {messagedigest md = messagedigest.getInstance (hashtype) ؛ md.update (source.getbytes ()) ؛ md.digest () ؛ // الحصول على النص المشفر لإكمال حساب التجزئة ، وإنتاج عدد صحيح طويل 128 بت [] = جديد char [16 * 2] ؛ // إذا تم تمثيل كل بايت في Quexadecimal ، استخدم حرفين int k = 0 ؛ بايت في أحرف سداسية عشوائية byte0 = incryptstr [ خذ التحويل العددي للبت 4 أقل في البايت} إرجاع سلسلة جديدة (str) ؛ // تحويل النتيجة بعد التحويل إلى سلسلة} catch (nosuchalgorithmexception e) {eprintstacktrace () ؛ سلسلة ثابتة gethash2 (مصدر السلسلة ، سلسلة hashtype) {StringBuilder sb = new StringBuilder () ؛ messagedigest md5 ؛ try {md5 = messagedigest.getInstance (hashtype) ؛ md5.update (source.getBytes () ؛ for (byte b: md5.digest () {sb.append (string.format ("٪ 02x" ، b)) ؛ // عشرية إلى سداسي عشري ، x تعني الإخراج في hexadecimal ، 02 يشير إلى أن هناك أقل من رقمين قبل الإخراج 0} sb.toString () ؛} catch @param source سلسلة يجب تشفيرها * param hashtype نوع التشفير (md5 و sha) * @RETURN */السلسلة الثابتة العامة gethash3 (مصدر السلسلة ، سلسلة hashtype) {// الأحرف المستخدمة لتحويل البواغ إلى hexdigits [] = {0 '،' 1 '،' 2 '،' 3 '،' ، '،' ، '،' ، '،' ، '، "9 '،' a '،' b '،' c '،' d '،' e '، f'} ؛ stringbuilder sb = new StringBuilder () ؛ messagedigest md5 ؛ try {md5 = messagedigest.getInstance (ashtype) ؛ md5.update (source.getbytes () ؛ = 0 ؛ (nosuchalgorithmexception e) {e.printstacktrace () ؛} return null ؛} الفراغ الثابت العام (سلسلة [] args) {system.out.println (gethash ("xiaokui" ، "md5")) ؛ system.out.println (gethash ("xiaokui" "/n") ؛ system.out.println(gethash2("xiaokui" ، "md5") ؛ system.out.println (gethash2 ("xiaokui" ، "sha") + "/n") ؛ shestem.out.println(gethash3( gethiokui" ، "md5") ؛ system.out.println (gethash3 ("xiaokui" ، "sha") + "/n") ؛}}نتيجة الإخراج
8E830882F03B2CB84D1A657F346DD41A 0BA5512371D00C86E91712F44AAB7138 8E830882F03B2CB84D1A657F346D41A 0BA5512371D00C86E91712F44AAB713898745F91 8E830882F03B2CB84D1A657F346DD41A 0BA5512371D00C86E91717171388745F91
لقد وجدنا أن الطرق الثلاثة تؤدي نفس التأثير ، وطول SHA هو 8 أحرف (32 بت) أكثر من MD5.
لخص
ما سبق هو المحتوى الكامل لهذه المقالة حول مثال الكود لفئة تشفير فئة MessagedIgest التي تأتي مع Java. آمل أن يكون ذلك مفيدًا للجميع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها.