بحلول نهاية الفترة ، سنلقي نظرة على مقدمة الواجبات المنزلية لأمن المعلومات. صادفت أن أواجه خوارزمية Playfair وخوارزمية التل في خوارزمية التشفير الكلاسيكية. من المثير للاهتمام تنفيذها بلغة JavaScript. أتحقق من Baidu أثناء الترميز ، ثم أعطي برنامجًا تعليميًا جيدًا حول أساسيات JavaScript.
playfair
Playfair Password (English: Playfair Cipher أو Playfair Square) هي كلمة مرور بديلة. مكتوبة على أساس طاولة تشفير 5*5 مربع ، مع 25 حرفًا مرتبة في الجدول. بالنسبة إلى 26 حرفًا باللغة الإنجليزية ، قم بإزالة Z الأكثر استخدامًا لتشكيل جدول كلمة مرور.
أفكار التنفيذ:
1. إعداد قائمة كلمة المرور
المفتاح هو كلمة أو عبارة ، ويتم فرز جدول كلمة المرور بناءً على المفتاح الذي قدمه المستخدم. إذا كانت هناك رسائل مكررة ، فيمكنك إزالة الأحرف المكررة بعد ذلك.
على سبيل المثال ، يمكن تجميع الكلب المجنون الرئيسي
| ج | س | ح | م | ر |
| ص | ز | أنا | ن | ش |
| أ | ب | ي | ص | الخامس |
| ذ | ه | ك | س | ث |
| د | و | ل | ق | x |
نسخة الكود كما يلي:
/*
* الوظيفة: تجميع قائمة كلمة المرور
*
* المعلمات: المفتاح (إزالة المساحة ومعالجة الرسملة)
*
* إرجاع: جدول كلمة المرور
*/
وظيفة CreateKey (مفاتيح) {
// صفيف أبجدي
var allchars = ['a' ، 'b' ، 'c' ، 'd' ، 'e' ، 'f' ، 'g' ، 'h' ، 'i' ، 'j' ، 'k' ، 'l' ، 'm' ، 'n' ، 'o' ، 'p' ، 'q' ، 'r' ، 's' ، 't' ، 'u' ،
// متغيرات مفاتيح مفاتيح الحصول على موضع الحرف في الجدول الأبجدي وحذف الحرف
لـ (var i = 0 ؛ i <keychars.length ؛ i ++) {
var index = allchars.indexof (keychars [i]) ؛
if (index> -1) {
allchars.splice (الفهرس ، 1) ؛
}
}
// أدخل الحروف في keychar في الأبجدية
لـ (var i = keychars.length-1 ؛ i> = 0 ؛ i-) {
allchars.unshift (keychars [i]) ؛
}
// إدراج شركات المفاتيح من العمود الأول في جدول كلمة المرور
لـ (var i = 0 ؛ i <5 ؛ i ++) {
لـ (var j = 0 ؛ j <5 ؛ j ++) {
المفتاح [j] [i] = allchars [i*5+j] ؛
}
}
}
بالنظر إلى أن الأحرف المكررة و Z تحتاج إلى إزالة عند إدخال شركات المفاتيح في جدول كلمة المرور ، فإن خوارزمية التصميم هي كما يلي:
نسخة الكود كما يلي:
/*
* الوظيفة: قم بإزالة الأحرف المكررة من الأوتار
*
* المعلمات: السلاسل التي يجب معالجتها
*
* العودة: سلسلة معالجة
*/
دالة الإزالة (str) {
var result = [] ، tempstr = "" ؛
var arr = str.split ('') ؛ // تقسيم السلسلة إلى صفيف
//arr.sort() ؛//sorting
لـ (var i = 0 ؛ i <arr.length ؛ i ++) {
var repertback = true ؛ // متغير التصميم هو التأكد من أن الجزء السابق من السلسلة غير موجود في نفس الأحرف ، لأن الخوارزمية التالية يمكن أن تضمن فقط أن نفس الأحرف متصلة معًا
لـ (var j = 0 ؛ j <result.length ؛ j ++) {
if (arr [i] == النتيجة [j])
التكرار = خطأ ؛
}
if (arr [i]! == tempstr && repreyback) {
result.push (arr [i]) ؛
tempster = arr [i] ؛
}آخر{
يكمل؛
}
}
return result.join ("") ؛ // تحويل الصفيف إلى سلسلة
}
2. تنظيم النص الواضح
اصنع زوجًا من رسالتين من النص العادي. إذا كان هناك رسالتان متطابقتان بجوار بعضهما البعض في أزواج أو أن الحرف الأخير هو واحد ، أدخل رسالة X. في المرحلة المبكرة من الترميز ، لم يكن مراعيًا ورفض إدخال عدد الحروف كفرد ، مما جعل تجربة المستخدم فقيرة.
var k = document.getElementById ("keychars"). value.touppercase (). استبدال (// s/ig ، '') ؛
قم بإزالة المساحات وتحويلها إلى أحرف كبيرة للنص العادي.
3. اكتب نص تشفير
قواعد تشفير النص العادي (من بايدو):
1) إذا كان P1 P2 على نفس الخط ، فإن النص المشفر المقابل C1 C2 هو الحرف القريب من الطرف الأيمن من P1 P2. يعتبر العمود الأول الجانب الأيمن من العمود الأخير. على سبيل المثال ، وفقًا للجدول السابق ، يتوافق CT مع OC
2) إذا كان P1 P2 في نفس العمود ، فإن النص المشفر المقابل C1 C2 هو الحروف الموجودة مباشرة أسفل P1 P2. يعتبر السطر الأول أدناه السطر الأخير.
3) إذا لم يكن P1 و P2 في نفس الصف وفي نفس العمود ، فإن C1 و C2 هما رسائلان في الزئنين الأخريين من المستطيل المحدد بواسطة P1 و P2 (كما هو الحال بالنسبة للاستبدال الأفقي أو الاستبدال العمودي ، يجب عليك تحديد موعد مسبقًا ، أو تجربته بنفسك). وفقًا للجدول السابق ، يتوافق WH مع TK أو KT.
على سبيل المثال ، وفقًا للجدول أعلاه ، النص العادي الذي توجد فيه حياة ، هناك أمل.
يمكنك أولاً تنظيمه في wh er et re is li fe th er e e e sh op ex
ثم النص المشفر هو: kt yg wo ok gy nl hj of cm yg kg lm mb wf
اقلب النص المشفر إلى رأس المال ، ثم قم بترتيبه في مجموعات من عدة رسائل.
على سبيل المثال ، في مجموعة من 5 ، Ktygw Ookgy nlhjo fcmyg kglmm bwf
4. فك التشفير
املأ مصفوفة 5*5 (كرر الحروف المتكررة والحروف Z) ، واملأ المواضع المتبقية للمصفوفة بالترتيب في المواضع المتبقية للمصفوفة ، والحصول على النص العادي من النص المشفر وفقًا لمصفوفة الاستبدال. افعل العكس.
التأثير كما هو موضح في الشكل:
تلة
Hill Password هي كلمة مرور بديلة تستخدم مبدأ نظرية المصفوفة الأساسية. مكتوبة على أساس طاولة تشفير 5*5 مربع ، مع 25 حرفًا مرتبة في الجدول. بالنسبة إلى 26 حرفًا باللغة الإنجليزية ، قم بإزالة Z الأكثر استخدامًا لتشكيل جدول كلمة مرور.
أفكار التنفيذ:
1. اكتب أبجدية
var chars = ['a' ، 'b' ، 'c' ، 'd' ، 'e' ، 'f' ، 'g' ، 'h' ، 'i' ، 'j' ، 'k' ، 'l' ، 'm' ، 'n' ، 'o' ، p '،'
2. توليد المفاتيح بشكل عشوائي
نسخة الكود كما يلي:
/*
* الوظيفة: توليد مفاتيح بشكل عشوائي
*
* العودة: مصفوفة مفتاح
*/
وظيفة RandomCreateKey () {
// قم بإنشاء أرقام بشكل عشوائي من 0 إلى 26
لـ (var i = 0 ؛ i <3 ؛ i ++) {
لـ (var j = 0 ؛ j <3 ؛ j ++) {
المفتاح [i] [j] = Math.Round (Math.Random ()*100 ٪ 26)
}
}
}
3. رمز المفتاح ، معالجة النص العادي بناءً على مفتاح إنشاء تلقائيًا:
نسخة الكود كما يلي:
/*
* الوظيفة: خوارزمية التل
*
* المعلمات: صفيف أقصى مع مضاعفات الطول 3
*
* العودة: سلسلة مشفرة
*/
وظيفة هيل (ع) {
// أحرف كبيرة النص المشفر
var res = "" ؛
// تطوير إجمالي عدد المرات التي يجب أن يتم فيها اجتياز السلسلة
var round = math.round (p.length/3) ؛
// التعامل مع
لـ (var b = 0 ؛ b <route ؛ b ++) {
// نص عادي 3
var temp3 = "" ؛
var temparr3 = [] ؛
var sumarr3 = [] ؛
لـ (var i = 0 ؛ i <3 ؛ i ++) {
temp3 += p.shift () ؛
لـ (var j = 0 ؛ j <chars.length ؛ j ++) {
إذا (temp3 [i] == chars [j])
temparr3 [i] = j ؛
}
}
// حساب
لـ (var i = 0 ؛ i <3 ؛ i ++) {
لـ (var j = 0 ؛ j <3 ؛ j ++) {
sumarr3 [i] = (temparr3 [j]*مفتاح [i] [j]) ٪ 26 ؛
}
}
// احصل على الفهرس المقابل للأحرف في الأبجدية
لـ (var i = 0 ؛ i <3 ؛ i ++) {
res += chars [sumarr3 [i]] ؛
}
}
عودة الدقة ؛
} ؛
التأثير كما هو موضح في الشكل:
الخوارزميات أعلاه لها أوجه القصور:
1. التصميم الموجهة للعملية ، درجة اقتران عالية
2. الكثير من الحلقات المتداخلة ، يجب تحسين كفاءة الخوارزمية
3. عدم كفاية النظر في المواقف المحتملة ، مثل عدم المعالجة عندما يدخل المستخدم أحرفًا غير فنية.
تلخيص:
بعد دراسة مقدمة الدورة التدريبية لأمن المعلومات لفترة من الزمن ، لا يمكنني إلا أن أفهم أساسيات أمن المعلومات. أمن المعلومات موضوع مثير للاهتمام للغاية. عندما تواجه بعض المشكلات ، فكر بأكبر قدر ممكن ، وفعل المزيد ، واستخدم المزيد. في الوقت نفسه ، يجب علينا أيضًا تعزيز تراكم الأساس الرياضي ، وتوحيد مؤسسة JS ، وتوسيع المعرفة. هذا الطريق أمامه طريق طويل.