C#實現(xiàn)XOR密碼(異或密碼)的示例代碼
XOR密碼(異或密碼)是一種簡單的加密算法,它使用異或(XOR)操作來對明文和密鑰進(jìn)行加密和解密。
異或操作是一種位運算,它對兩個二進(jìn)制數(shù)的對應(yīng)位進(jìn)行比較,如果兩個位相同(都為0或都為1),則結(jié)果位為0,否則為1。以下是兩個二進(jìn)制數(shù)進(jìn)行異或操作的真值表:
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
在XOR密碼中,我們將明文的每個字節(jié)(8個位)與密鑰的對應(yīng)字節(jié)進(jìn)行異或操作,生成密文。解密過程與加密過程相同,將密文的每個字節(jié)與密鑰的對應(yīng)字節(jié)進(jìn)行異或操作,得到原始明文。
XOR密碼的特點包括:
1、異或操作具有反轉(zhuǎn)性質(zhì),即 `A XOR B XOR B = A`。所以,如果我們知道明文或密文和密鑰中的一個,可以輕松獲取另一個。
2、由于異或操作是一種可逆運算,所以加密和解密使用相同的算法。
3、異或密碼相對較簡單,安全性較低。因此,它通常用于輔助加密或在加密算法中的一個步驟。
為了提高安全性,通常會使用較長的密鑰,并且使用隨機(jī)生成的密鑰。在實際應(yīng)用中,XOR密碼常常與其他加密算法結(jié)合使用,以增加安全性。
值得注意的是,XOR密碼的安全性依賴于密鑰的保密性。如果密鑰被泄露,攻擊者可以輕松解密消息。因此,在實際使用中,需要采取措施確保密鑰的安全性,例如使用安全的密鑰交換協(xié)議或使用公鑰密碼學(xué)。
下面是一個使用C#編寫的XOR密碼的完整示例:
using System; using System.Text; public class XORCipher { private static string EncryptDecrypt(string input, string key) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < input.Length; i++) { // Perform XOR operation between the current character in the input and key char c = (char)(input[i] ^ key[i % key.Length]); sb.Append(c); } return sb.ToString(); } public static void Main() { Console.WriteLine("Enter the text to encrypt:"); string input = Console.ReadLine(); Console.WriteLine("Enter the encryption key:"); string key = Console.ReadLine(); // Encrypt the input string encrypted = EncryptDecrypt(input, key); Console.WriteLine("Encrypted text: " + encrypted); // Decrypt the encrypted text string decrypted = EncryptDecrypt(encrypted, key); Console.WriteLine("Decrypted text: " + decrypted); } }
在這個示例中,我們定義了一個`XORCipher`類,其中包含一個用于加密和解密的`EncryptDecrypt`方法。該方法接受明文和密鑰作為輸入,在每個字符上執(zhí)行異或操作,并返回加密或解密后的結(jié)果。
在`Main`方法中,我們首先提示用戶輸入要加密的文本和密鑰。然后,我們調(diào)用`EncryptDecrypt`方法對輸入進(jìn)行加密,并打印加密后的結(jié)果。接下來,我們使用相同的密鑰對加密后的文本進(jìn)行解密,并打印解密后的結(jié)果。
你可以根據(jù)需要修改該示例,例如添加錯誤檢查或擴(kuò)展密鑰長度。請記住,密鑰的保密性非常重要,且必須與解密者共享。
方法補充
除了上文的實現(xiàn)方法,小編為大家整理了其他C#實現(xiàn)簡單異或加密的相關(guān)代碼,希望對大家有所幫助
將本地的mp4和ts文件加密為“dj”文件,無法播放。解密則是將“dj”文件解密為mp4或ts文件。
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; namespace ConsoleApp2 { class Program { static void Main(string[] args) { Console.Write("請輸入操作方式(1加密、0解密):"); var key = Console.ReadLine(); if (key == "1") { Encrypt(); } else { Dencrypt(); } Console.ReadKey(); } /// <summary> /// 加密處理 /// </summary> static void Encrypt() { string path = AppDomain.CurrentDomain.BaseDirectory; string[] extends = new string[] { "*.ts", "*.mp4" }; foreach (var ex in extends) { foreach (var file in Directory.GetFiles(path, ex)) { Encrypt(file, file + ".dj"); Console.WriteLine($"[{file}]加密成功"); File.Delete(file); } } Console.WriteLine("所有文件加密成功"); } static void Dencrypt() { string path = AppDomain.CurrentDomain.BaseDirectory; foreach (var file in Directory.GetFiles(path, "*.dj")) { Encrypt(file, file.Replace(".dj", "")); Console.WriteLine($"[{file}]解密成功"); File.Delete(file); } Console.WriteLine("所有文件解密成功"); } static void Encrypt(string sourceFileName, string targetFileName) { using (var writeStream = File.OpenWrite(targetFileName)) { //int start = 0; int len = 0; byte[] readBytes = new byte[1024]; using (var readStream = File.OpenRead(sourceFileName)) { var totalLenth = readStream.Length; while ((len = readStream.Read(readBytes, 0, readBytes.Length)) > 0) { writeStream.Write(Encry(readBytes), 0, len); Console.WriteLine($"[{sourceFileName}]讀取中[{readStream.Position}/{totalLenth}]"); } } } } static byte[] Encry(byte[] bs) { for (int i = 0; i < bs.Length; i++) { bs[i] = (byte)(bs[i] ^ 0x12); } return bs; } } }
到此這篇關(guān)于C#實現(xiàn)XOR密碼(異或密碼)的示例代碼的文章就介紹到這了,更多相關(guān)C# XOR密碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實現(xiàn)讓ListBox適應(yīng)最大Item寬度的方法
這篇文章主要介紹了C#實現(xiàn)讓ListBox適應(yīng)最大Item寬度的方法,涉及ListBox控件的操作技巧,需要的朋友可以參考下2015-05-05c#遍歷System.drawing.Color下面的所有顏色以及名稱以查看
c#遍歷System.drawing.Color下面的所有顏色以及名稱以查看,需要的朋友可以參考一下2013-02-02C#Windows窗體設(shè)計之ContextMenuStrip(鼠標(biāo)右擊菜單)的使用
這篇文章主要介紹了C#Windows窗體設(shè)計之ContextMenuStrip(鼠標(biāo)右擊菜單)的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07c#數(shù)據(jù)綁定之?dāng)?shù)據(jù)轉(zhuǎn)化為信息的示例
這篇文章主要介紹了c#數(shù)據(jù)綁定中的數(shù)據(jù)轉(zhuǎn)化為信息的示例,需要的朋友可以參考下2014-04-04C#以太網(wǎng)Sockets服務(wù)器設(shè)計實現(xiàn)
本文主要介紹了C#以太網(wǎng)Sockets服務(wù)器設(shè)計實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02C#使用Win32?Api實現(xiàn)進(jìn)程注入到wechat的過程
這篇文章主要介紹了C#使用Win32?Api實現(xiàn)進(jìn)程注入到wechat,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09