只是想知道,如果我使用TripleDES
加密(keysize
(168)192bits)并向用户询问密钥,并且用户提供的密钥可能或多或少大小比较根据密码的实际大小,我该怎么办?我应该只使用String.PadLeft
或String.PadRight
为密钥添加0或1吗?是否有任何内置的方法/想法/库/棘手的代码来添加随机字符串到键?如果是这样,那么可以逆转这个过程吗?
我希望使用散列算法,但.Net不支持任何输出大小为192bits的散列算法。那有什么解决方案吗?
这个简单的代码是为了使它更清晰:(仅限加密部分)
static void Main(string[] args)
{
Console.WriteLine("Enter Plain Text: ");
string original = Console.ReadLine();
Console.WriteLine("Enter The Key: ");
string keyString = Console.ReadLine();
byte[] data = Encoding.UTF8.GetBytes(original);
byte[] key = Encoding.UTF8.GetBytes(keyString);
TripleDESCryptoServiceProvider myTripleDES = new TripleDESCryptoServiceProvider();
byte[] encrypted = EncryptString(data, key, myTripleDES.IV);
string encrypt = Convert.ToBase64String(encrypted);
string decrypted = DecryptStringFromBytes(encrypted, key, myTripleDES.IV);
Console.WriteLine("encryted: " + encrypt);
Console.WriteLine("decrypted: " + decrypted);
Console.ReadLine();
}
static byte[] EncryptString(byte[] data, byte[] Key, byte[] IV)
{
TripleDESCryptoServiceProvider tdsAlg = new TripleDESCryptoServiceProvider();
tdsAlg.BlockSize = 64;
tdsAlg.KeySize = 192;
tdsAlg.Padding = PaddingMode.PKCS7;
tdsAlg.Mode = CipherMode.CBC;
tdsAlg.Key = Key;
tdsAlg.IV = IV;
ICryptoTransform encryptor = tdsAlg.CreateEncryptor(tdsAlg.Key, tdsAlg.IV);
byte[] encrypted = encryptor.TransformFinalBlock(data, 0, data.Length);
Console.WriteLine("The Cipher length: " + encrypted.Length);
return encrypted;
}
在我给出(有效的)固定大小键输入之前,此代码不起作用。我的问题是实现这一目标的最佳方法是什么?