【发布时间】:2015-08-27 20:32:00
【问题描述】:
我正在尝试学习简单的密码学,作为初学者,我正在尝试实现以下目标。
一个函数,将两个 128 位参数(密钥和明文)作为输入并返回它们的 XOR。我知道 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);
}
}
加密器.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 位?
例如B25829846AED8 显然是 128 位 WEP 密钥。如果我将它分配给我的key 变量,并且当我输入encrypt 方法时,keyBits.Length 属性的值是 208。这是我没有得到的。参数key 的长度也是26,我也对此感到困惑。
【问题讨论】:
-
XOR 实际上是非常安全的。事实上,如果处理得当,它是唯一“不可破解”的密码学。它被称为一次性便笺或 OTP。但是,只有在一条消息中只使用一次它并确保平板电脑安全时,它才是安全的。