ในตอนท้ายของช่วงเวลาเราจะดูการแนะนำการบ้านความปลอดภัยของข้อมูล ฉันพบอัลกอริทึม Playfair และอัลกอริทึมฮิลล์ในอัลกอริทึมการเข้ารหัสแบบคลาสสิก เป็นที่น่าสนใจที่จะนำไปใช้ในภาษา JavaScript ฉันตรวจสอบ Baidu ในขณะที่เข้ารหัสแล้วให้การสอนที่ดีเกี่ยวกับพื้นฐานของ JavaScript
เครื่องเล่น
รหัสผ่าน Playfair (ภาษาอังกฤษ: Playfair Cipher หรือ Playfair Square) เป็นรหัสผ่านทดแทน เขียนขึ้นอยู่กับตารางรหัส 5*5 ตารางโดยมีตัวอักษร 25 ตัวจัดเรียงในตาราง สำหรับ 26 ตัวอักษรเป็นภาษาอังกฤษให้ลบ Z ที่ใช้กันมากที่สุดเพื่อสร้างตารางรหัสผ่าน
แนวคิดการใช้งาน:
1. เตรียมรายการรหัสผ่าน
คีย์คือคำหรือวลีและตารางรหัสผ่านจะถูกแยกออกตามคีย์ที่ผู้ใช้กำหนด หากมีตัวอักษรที่ซ้ำกันคุณสามารถลบตัวอักษรที่ซ้ำกันได้หลังจากนั้น
ตัวอย่างเช่น Key Crazy Dog สามารถรวบรวมได้
| C | โอ | ชม | ม. | T |
| R | ก | ฉัน | n | คุณ |
| อัน | ข | J | P | V |
| y | อี | K | ถาม | W |
| d | f | l | S | x |
การคัดลอกรหัสมีดังนี้:
-
* ฟังก์ชั่น: การรวบรวมรายการรหัสผ่าน
-
* พารามิเตอร์: คีย์ (การกำจัดพื้นที่และการประมวลผลแบบอักษรเป็นตัวพิมพ์ใหญ่)
-
* return: ตารางรหัสผ่าน
-
ฟังก์ชั่น createKey (keychars) {
// อาร์เรย์ตัวอักษร
var allchars = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', ',', ','
// ตัวแปร keychars รับตำแหน่งของตัวอักษรในตารางตัวอักษรและลบตัวอักษร
สำหรับ (var i = 0; i <keychars.length; i ++) {
var index = allchars.indexof (keychars [i]);
ถ้า (ดัชนี> -1) {
allchars.splice (ดัชนี, 1);
-
-
// แทรกตัวอักษรใน keychar ลงในตัวอักษร
สำหรับ (var i = keychars.length-1; i> = 0; i-) {
allchars.unshift (keychars [i]);
-
// แทรก keychars จากคอลัมน์แรกลงในตารางรหัสผ่าน
สำหรับ (var i = 0; i <5; i ++) {
สำหรับ (var j = 0; j <5; j ++) {
คีย์ [j] [i] = allchars [i*5+j];
-
-
-
เมื่อพิจารณาว่าต้องลบอักขระที่ซ้ำกันและ z เมื่อใส่ keychars ลงในตารางรหัสผ่านอัลกอริทึมการออกแบบมีดังนี้:
การคัดลอกรหัสมีดังนี้:
-
* ฟังก์ชั่น: ลบตัวอักษรที่ซ้ำกันออกจากสตริง
-
* พารามิเตอร์: สตริงที่ต้องดำเนินการ
-
* return: สตริงที่ประมวลผล
-
ฟังก์ชั่น removedUplication (str) {
var result = [], tempStr = "";
var arr = str.split (''); // แบ่งสตริงเป็นอาร์เรย์
//arr.sort();//sorting
สำหรับ (var i = 0; i <arr.length; i ++) {
var repeatback = true; // ตัวแปรการออกแบบคือเพื่อให้แน่ใจว่าส่วนก่อนหน้าของสตริงไม่มีอยู่ในอักขระเดียวกันเนื่องจากอัลกอริทึมต่อไปนี้สามารถตรวจสอบให้แน่ใจว่าอักขระเดียวกันเชื่อมต่อเข้าด้วยกัน
สำหรับ (var j = 0; j <result.length; j ++) {
ถ้า (arr [i] == ผลลัพธ์ [j])
repeatback = false;
-
if (arr [i]! == tempstr && repeatback) {
result.push (arr [i]);
tempstr = arr [i];
}อื่น{
ดำเนินการต่อ;
-
-
return result.join (""); // แปลงอาร์เรย์เป็นสตริง
-
2. จัดระเบียบข้อความที่ชัดเจน
สร้างตัวอักษรสองตัวของข้อความธรรมดา หากมีตัวอักษรที่เหมือนกันสองตัวติดกันเป็นคู่หรือตัวอักษรตัวสุดท้ายเป็นโสดให้ใส่ตัวอักษร X ในระยะแรกของการเขียนโค้ดเขาไม่ได้พิจารณาและปฏิเสธที่จะป้อนจำนวนตัวอักษรเป็นเอกพจน์ซึ่งทำให้ประสบการณ์ผู้ใช้แย่
var k = document.getElementById ("keychars"). value.touppercase (). แทนที่ (// s/ig, '');
ลบช่องว่างและแปลงเป็นตัวพิมพ์ใหญ่สำหรับข้อความธรรมดา
3. เขียนข้อความรหัส
กฎการเข้ารหัสข้อความธรรมดา (จาก Baidu):
1) ถ้า P1 P2 อยู่ในบรรทัดเดียวกัน Ciphertext ที่สอดคล้องกัน C1 C2 คือตัวอักษรใกล้กับปลายด้านขวาของ P1 P2 คอลัมน์แรกถือเป็นด้านขวาของคอลัมน์สุดท้าย ตัวอย่างเช่นตามตารางก่อนหน้า CT สอดคล้องกับ OC
2) ถ้า P1 P2 อยู่ในคอลัมน์เดียวกัน Ciphertext ที่สอดคล้องกัน C1 C2 คือตัวอักษรทันทีด้านล่าง P1 P2 บรรทัดแรกถือเป็นด้านล่างบรรทัดสุดท้าย
3) ถ้า P1 และ P2 ไม่อยู่ในแถวเดียวกันและในคอลัมน์เดียวกัน C1 และ C2 เป็นตัวอักษรที่อีกสองมุมของสี่เหลี่ยมที่กำหนดโดย P1 และ P2 (สำหรับการเปลี่ยนแนวนอนหรือการเปลี่ยนแนวตั้งคุณต้องทำการนัดหมายล่วงหน้าหรือลองเอง) ตามตารางก่อนหน้า WH สอดคล้องกับ TK หรือ KT
ตัวอย่างเช่นตามตารางด้านบนข้อความธรรมดาที่มีชีวิตมีความหวัง
ก่อนอื่นคุณสามารถจัดระเบียบมันเป็น wh er et เขา ri re คือ li fe th er ei sh op ex
จากนั้น ciphertext คือ: kt yg wo ok gy nl hj ของ cm yg kg lm mb wf
เปลี่ยน ciphertext เป็นทุนแล้วจัดเรียงเป็นกลุ่มของตัวอักษรหลายตัว
ตัวอย่างเช่นในกลุ่ม 5, ktygw ookgy nlhjo fcmyg kglmm bwf
4. การถอดรหัส
เติมเมทริกซ์ 5*5 (ทำซ้ำตัวอักษรและตัวอักษรซ้ำ z) เติมตำแหน่งที่เหลือของเมทริกซ์ตามลำดับที่เหลือของเมทริกซ์และรับข้อความธรรมดาจาก ciphertext ตามเมทริกซ์ทดแทน ทำตรงกันข้าม
เอฟเฟกต์ดังแสดงในรูป:
เนินเขา
รหัสผ่านฮิลล์เป็นรหัสผ่านทดแทนที่ใช้หลักการทฤษฎีเมทริกซ์พื้นฐาน เขียนขึ้นอยู่กับตารางรหัส 5*5 ตารางโดยมีตัวอักษร 25 ตัวจัดเรียงในตาราง สำหรับ 26 ตัวอักษรเป็นภาษาอังกฤษให้ลบ Z ที่ใช้กันมากที่สุดเพื่อสร้างตารางรหัสผ่าน
แนวคิดการใช้งาน:
1. เขียนตัวอักษร
var chars = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', ',', ',', '
2. สร้างคีย์แบบสุ่ม
การคัดลอกรหัสมีดังนี้:
-
* ฟังก์ชั่น: สร้างคีย์แบบสุ่ม
-
* return: คีย์เมทริกซ์
-
ฟังก์ชั่น randomCreateKey () {
// สุ่มสร้างตัวเลขจาก 0 ถึง 26
สำหรับ (var i = 0; i <3; i ++) {
สำหรับ (var j = 0; j <3; j ++) {
key [i] [j] = math.round (math.random ()*100%26)
-
-
-
3. รหัสคีย์ประมวลผลข้อความธรรมดาตามคีย์ที่สร้างขึ้นโดยอัตโนมัติ:
การคัดลอกรหัสมีดังนี้:
-
* ฟังก์ชั่น: อัลกอริทึมฮิลล์
-
* พารามิเตอร์: อาร์เรย์ตัวพิมพ์ใหญ่ที่มีหลายความยาว 3
-
* return: สตริงที่เข้ารหัส
-
ฟังก์ชั่นฮิลล์ (p) {
// ตัวอักษรตัวอักษรตัวอักษรเข้ารหัส
var res = "";
// พัฒนาจำนวนครั้งทั้งหมดที่สตริงจะต้องผ่านการสำรวจ
var round = math.round (p.length/3);
// จัดการกับ
สำหรับ (var b = 0; b <round; 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]*key [i] [j])%26;
-
-
// รับดัชนีที่สอดคล้องกันของอักขระในตัวอักษร
สำหรับ (var i = 0; i <3; i ++) {
res += chars [sumarr3 [i]];
-
-
Ret Res;
-
เอฟเฟกต์ดังแสดงในรูป:
อัลกอริทึมข้างต้นมีข้อบกพร่อง:
1. การออกแบบที่มุ่งเน้นกระบวนการระดับการมีเพศสัมพันธ์สูง
2. ลูปซ้อนกันมากเกินไปประสิทธิภาพของอัลกอริทึมจะต้องได้รับการปรับให้เหมาะสม
3. การพิจารณาสถานการณ์ที่ไม่เพียงพอเช่นไม่ประมวลผลเมื่อผู้ใช้ป้อนอักขระที่ไม่ใช่ตัวอักษร
สรุป:
หลังจากศึกษาการแนะนำหลักสูตรเกี่ยวกับความปลอดภัยของข้อมูลเป็นระยะเวลาหนึ่งฉันสามารถเข้าใจพื้นฐานของความปลอดภัยของข้อมูลเท่านั้น ความปลอดภัยของข้อมูลเป็นเรื่องที่น่าสนใจมาก เมื่อคุณพบปัญหาบางอย่างให้คิดให้มากที่สุดทำมากขึ้นและใช้มากขึ้น ในเวลาเดียวกันเราต้องเสริมสร้างการสะสมของรากฐานทางคณิตศาสตร์รวมมูลนิธิ JS และขยายความรู้ ถนนสายนี้มีทางยาวไป