我試圖學習簡單的密碼學和作爲初學者,我試圖實現以下。功能XOR兩個128位。我如何生成128位值?
一個函數,將兩個128位params(鍵和明文)作爲輸入並返回它們的XOR。我知道異或並不安全,但我剛從一個簡單的例子開始。
這是我曾嘗試:
class Program
static void Main(string[] args)
{
string key = "B25829846AED8"; //128 bits??
string plaintext = "A9BB51625ECBE"; //128 bits??
//Convert key to byte array
byte[] keyBytes = new byte[key.Length * sizeof(char)];
System.Buffer.BlockCopy(key.ToCharArray(), 0, keyBytes, 0, keyBytes.Length);
//Convert plaintext to byte array
byte[] plaintextBytes = new byte[plaintext.Length * sizeof(char)];
System.Buffer.BlockCopy(plaintext.ToCharArray(), 0, plaintextBytes, 0, plaintextBytes.Length);
//Encrypt (XOR)
string result = new Encrypter().encrypt(keyBytes, plaintextBytes);
}
}
Encrypter.cs:
class Encrypter
{
public string encrypt(byte[] key, byte[] plaintext)
{
BitArray keyBits = new BitArray(key);
BitArray plaintextBits = new BitArray(plaintext);
if(keyBits.Length == plaintextBits.Length)
{
BitArray result = keyBits.Xor(plaintextBits);
return result.ToString();
}
return null;
}
}
我的問題:
我用什麼作爲關鍵掙扎,純文本。我怎樣才能確保每個值都是正確的128位?
E.g. B25829846AED8
顯然是一個128位的WEP密鑰。如果我將此分配給我的key
變量,並且當我輸入encrypt
方法時,keyBits.Length
屬性的值爲208.這是我沒有得到的。另外參數key
的長度爲26,我也很困惑。
XOR其實是非常安全的。事實上,如果做得好的話,這是唯一的「不可破解的」加密數據。它被稱爲一次性墊,或OTP。但是,如果您只使用一次,只有一條消息,並且保持安全墊的安全,則它是安全的。 –