XOR แนะนำสั้น ๆ : XOR เป็นการดำเนินการบิตแบบไบนารีซึ่งแสดงด้วยสัญลักษณ์ XOR หรือ ^ อัลกอริทึมของมันคือการใช้ค่าเดียวกันกับ 0 และ 1 สำหรับแต่ละบิตไบนารีของจำนวนทั้งสองด้านของผู้ประกอบการ
ความเข้าใจที่เรียบง่ายคือการเพิ่มโดยไม่ต้องพกพาเช่น 1+1 = 0, 0+0 = 0, 1+0 = 1
คำอธิบายข้อกำหนด
การเข้ารหัสข้อมูลในยุคข้อมูลเป็นหัวข้อที่สำคัญมาก ในระหว่างกระบวนการทำโครงการฉันยังใช้อัลกอริทึมการเข้ารหัสที่ค่อนข้างซับซ้อน อย่างไรก็ตามเนื่องจากเทคโนโลยีที่เกี่ยวข้องเป็นความลับฉันจึงใช้เวอร์ชันที่ค่อนข้างง่ายที่นี่โดยใช้สตรีมอินพุตและส่งสัญญาณและการดำเนินการ XOR เพื่อเข้ารหัสไฟล์โดยพลการ เกี่ยวกับอัลกอริทึมการถอดรหัสมันง่ายมากและสามารถแก้ไขได้โดยคิดถึงมันด้วยตัวเอง
หลักการของคณิตศาสตร์
อัลกอริทึมการเข้ารหัสนี้ใช้ฟังก์ชั่นของสองตัวเลข XOR มาพูดคุยสั้น ๆ เกี่ยวกับหลักการของ XOR XOR เป็นการดำเนินการเข้ารหัสไบนารีของไฟล์ พูดง่ายๆเมื่อบิตไบนารีทั้งสองเหมือนกันมันเป็น 0 และไม่ใช่ 1 ในเวลาเดียวกัน ดูตัวอย่างต่อไปนี้:
// การเป็นตัวแทนไบนารี 7: 00000111 // การแสดงไบนารีของ 2: 00000010 // ผลลัพธ์ที่ได้จาก XOR ของทั้งสอง: 00000101 // ผลลัพธ์ที่ได้จากจำนวน 5 // ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
การใช้รหัส
นำเข้า java.io.*; class filesecret {โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {// ค้นหาไฟล์ที่จะเข้ารหัสให้ระบุตัวอักษรไดรฟ์ด้วยตัวเองและอินพุตและเอาต์พุตไม่จำเป็นต้องอยู่ในไฟล์ไดรฟ์ไดรฟ์ตัวอักษร ตัวอักษร: // decrypted file "); // สร้างช่องข้อมูลเพื่ออนุญาตข้อมูลไบนารีของรูปภาพที่จะไหลเข้าสู่ FileInputStream input = ใหม่ FileInputStream (interfile); fileOutputStream output = ใหม่ fileOutputStream (outfile); // ในกระบวนการอ่านข้อมูลการอ่าน XOR เป็นตัวเลข หมายเลขนี้ควรสร้างขึ้นโดยอัลกอริทึมการเข้ารหัสบางชนิด ที่นี่ฉันเพียงแค่รวบรวมหมายเลข 928 (วันเกิดของฉัน) จากนั้นดำเนินการพิเศษหรือและส่งออกเนื้อหาข้อมูลที่ได้รับ int = 0; // ตัวแปรนี้ใช้เพื่อจัดเก็บข้อมูลการอ่าน แน่นอนประเภทข้อมูลที่ยาวขึ้นเช่นนานสามารถใช้งานได้ที่นี่ แน่นอนเราสามารถใช้ประเภทข้อมูลอื่น ๆ ได้ เพียงแค่ตอบสนองประเภทข้อมูลที่ปลายทั้งสองของ ^ ที่สามารถแปลงให้กันและกันได้อย่างน้อยก็สามารถโยนได้ในขณะที่ ((เนื้อหา = input.read ())! =-1) // หากไม่ถึงจุดสิ้นสุดของไฟล์จากนั้นอ่านข้อมูลต่อไป -1 เป็นอักขระสิ้นสุดของไฟล์ {output.write (เนื้อหา^928); // เขียนไปยังสตรีมไฟล์เอาต์พุต} // ปิดอินพุตทรัพยากร close (); output.close ();}}การประเมินฟังก์ชั่นรหัส
สำหรับรหัสนี้ฟังก์ชั่นสามารถตอบสนองความต้องการได้ แต่มีข้อบกพร่อง ขั้นแรกอัลกอริทึมการเข้ารหัสไม่ได้ใช้เพื่อสร้างปลายอีกด้านของหมายเลข XOR และประการที่สองฉันไม่ได้ใช้การถอดรหัสของไฟล์ ในความเป็นจริงการถอดรหัสนั้นง่ายมาก โปรดอ่านส่วนหลักการทางคณิตศาสตร์อย่างรอบคอบและคุณสามารถรู้วิธีการเขียนอัลกอริทึมการถอดรหัส ในความเป็นจริงการเข้ารหัสและการถอดรหัสจะไม่ถูกนำไปใช้ในเวลาเดียวกันในสถานที่เดียวกัน แต่การเข้ารหัสจะคำนวณโดยใช้อัลกอริทึมการเข้ารหัสเดียวกัน
อัลกอริทึมที่ได้รับการปรับปรุงโดยใช้ตัวเลขสุ่ม
ในกระบวนการข้างต้นเราใช้ค่าที่กำหนดเพื่อดำเนินการ XOR กับไฟล์ไบนารีที่เราอ่าน ดังนั้นเราสามารถใช้หมายเลขสุ่มเพื่อแทนที่การประชุมนี้ได้หรือไม่? คำตอบคือใช่ ก่อนอื่นเราใช้ตัวแปรประเภท Int เพื่อเก็บไว้ ช่วงที่สามารถแสดงได้คือ: บวกหรือลบ 2.1 พันล้านตัวเลขที่เป็นตัวแทน รหัสเฉพาะมีดังนี้:
// วิธีการสร้างตัวเลขสุ่มนำเข้า java.util.*; คลาสสาธารณะแบบสุ่ม {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {สุ่มสุ่ม = ใหม่สุ่ม (); int num = random.nextint (11); // ระบุว่ามีการสร้างหมายเลขสุ่มระหว่าง 0-10 เราควรจะสามารถบันทึกหมายเลขสุ่มที่สร้างขึ้นสำหรับการเข้ารหัสและตัวถอดรหัสเพื่อใช้ System.out.println ("หมายเลขสุ่มคือ:"+num); -อัลกอริทึมการเข้ารหัสที่ดีขึ้น
รหัสเข้ารหัส:
นำเข้า java.io.*; นำเข้า java.util.*; คลาส filesecret {โมฆะคงที่สาธารณะ (สตริง [] args) โยนข้อยกเว้น {// ค้นหาไฟล์ที่จะเข้ารหัสให้ระบุตัวอักษรไดรฟ์ด้วยตัวเอง outfile = ไฟล์ใหม่ ("ไดรเวอร์: // ไฟล์ถอดรหัส"); // สร้างช่องข้อมูลเพื่อให้ข้อมูลไบนารีของรูปภาพไหลเข้าสู่ fileInputStream อินพุต = ใหม่ fileInputStream (infile); fileOutputStream output = new FileOutputStream (outfile); ระหว่าง 0 ถึง 10 ถูกสร้างขึ้น เราควรจะสามารถบันทึกหมายเลขสุ่มที่สร้างขึ้นสำหรับการเข้ารหัสและตัวถอดรหัสเพื่อใช้ System.out.println ("หมายเลขสุ่มคือ:"+NUM); // ในกระบวนการอ่านข้อมูลการอ่านจะเป็นตัวเลข XOR ซึ่งควรสร้างขึ้นโดยอัลกอริธึมการเข้ารหัสบางชนิด ที่นี่ฉันเพียงแค่รวบรวมหมายเลข 928 (วันเกิดของฉัน) จากนั้นดำเนินการ XOR และส่งออกเนื้อหาข้อมูลข้อมูลที่ได้รับ = 0; // ตัวแปรนี้ใช้เพื่อจัดเก็บข้อมูลการอ่าน แน่นอนประเภทข้อมูลที่ยาวขึ้นเช่นนานสามารถใช้งานได้ที่นี่ แน่นอนเราสามารถใช้ประเภทข้อมูลอื่น ๆ ได้ เราจำเป็นต้องตอบสนองประเภทข้อมูลที่ปลายทั้งสองของ ^ เพื่อแปลงซึ่งกันและกันและอย่างน้อยการแปลงประเภทการหล่อสามารถทำได้ในขณะที่ ((เนื้อหา = input.read ())! =-1) // หากไม่ถึงจุดสิ้นสุดของไฟล์จากนั้นอ่านข้อมูลต่อไป -1 คืออักขระท้ายของไฟล์ {output.write (เนื้อหา^num); // เขียนไปยังสตรีมไฟล์เอาต์พุต} // ปิดทรัพยากร input.close (); output.close ();}}ด้านการเข้ารหัสจำเป็นต้องแจ้งด้านการถอดรหัสของจำนวนที่สร้างขึ้นในรหัสข้างต้นมิฉะนั้นการถอดรหัสของไฟล์ไม่สามารถนำไปใช้ได้
รหัสถอดรหัส:
นำเข้า java.io.*; class filesecret {โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {// ค้นหาไฟล์ที่จะเข้ารหัสให้ระบุตัวอักษรไดรฟ์ด้วยตัวเองและอินพุตและเอาต์พุตไม่จำเป็นต้องอยู่ในไฟล์ไดรฟ์ไดรฟ์ตัวอักษร ตัวอักษร: // decrypted file "); // สร้างช่องข้อมูลเพื่ออนุญาตข้อมูลไบนารีของรูปภาพที่จะไหลเข้าสู่ FileInputStream input = ใหม่ FileInputStream (interfile); fileOutputStream output = ใหม่ fileOutputStream (outfile); // ในกระบวนการอ่านข้อมูลการอ่าน XOR เป็นตัวเลข หมายเลขนี้ควรสร้างขึ้นโดยอัลกอริทึมการเข้ารหัสบางชนิด ที่นี่ฉันเพียงแค่รวบรวมหมายเลข 928 (วันเกิดของฉัน) จากนั้นดำเนินการพิเศษหรือและส่งออกเนื้อหาข้อมูลที่ได้รับ int = 0; // ตัวแปรนี้ใช้เพื่อจัดเก็บข้อมูลการอ่าน แน่นอนประเภทข้อมูลที่ยาวขึ้นเช่นนานสามารถใช้งานได้ที่นี่ แน่นอนเราสามารถใช้ประเภทข้อมูลอื่น ๆ ได้ เพียงแค่ตอบสนองประเภทข้อมูลที่ปลายทั้งสองของ ^ ที่สามารถแปลงให้กันและกันได้อย่างน้อยก็สามารถโยนได้ในขณะที่ ((เนื้อหา = input.read ())! =-1) // หากไม่ถึงจุดสิ้นสุดของไฟล์จากนั้นอ่านข้อมูลต่อไป -1 เป็นอักขระท้ายของไฟล์ {output.write (เนื้อหา^ หมายเลขที่เข้ารหัสที่ส่งจากปลายเข้ารหัส); // เขียนไปยังสตรีมไฟล์เอาต์พุต} // ปิดทรัพยากรอินพุต close (); output.close ();}}}ปรับปรุงอีกครั้ง
ในความเป็นจริงในรหัสของเรารหัสการเข้ารหัสมาตรฐานควรสร้างแบบสุ่มและมีสัญลักษณ์ต่าง ๆ เช่นตัวอักษรและตัวเลข ดังนั้นเราจะสร้างสตริงการเข้ารหัสดังกล่าวได้อย่างไร ฉันจะแปลงสตริงการเข้ารหัสดังกล่าวเป็นรหัสไบนารีได้อย่างไรหลังจากสร้างมันได้อย่างไร ให้แนวคิด: การใช้นิพจน์ทั่วไปของ Java สามารถสร้างสตริงที่คุณต้องการจากนั้นใช้วิธีการแปลงสตริงเพื่อสร้างรหัสไบนารีที่เกี่ยวข้อง ฉันได้ใช้วิธีการสร้างการเข้ารหัสที่ซับซ้อนอย่างมากด้วยตัวเอง แต่ไม่สามารถเปิดเผยได้ สิ่งนี้เกี่ยวข้องกับข้อมูลของโครงการในห้องปฏิบัติการและมีหลายสาขาของการเข้ารหัสและอัลกอริทึมการเข้ารหัสแบบคลาสสิกมากมายที่สามารถใช้ได้
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับคำอธิบายโดยละเอียดของหลักการเข้ารหัสและการใช้ไฟล์ใด ๆ ในการดำเนินการ Java XOR ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงเว็บไซต์นี้ต่อไปได้:
Java ใช้การดำเนินการ XOR เพื่อใช้รหัสอินสแตนซ์การเข้ารหัสและถอดรหัสแบบง่าย ๆ
ตัวอย่างรหัสการใช้งานการเขียนโปรแกรม Java ของ exor หรือการดำเนินการบน hexadecimal strings
การวิเคราะห์รหัสปัญหา XOR ใน Java
หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!