只是想知道,如果我使用TripleDES
加密(keysize
(168)192bits)并向用户询问密钥并且用户提供的密钥与密码的实际大小相比可能或多或少,那么我该怎么办?String.PadLeft
我应该使用orString.PadRight
键添加 0 还是 1 ?是否有任何内置的方法/想法/库/棘手的代码来向密钥添加随机字符串?如果是这样,那么是否有可能扭转这个过程?
我希望使用散列算法,但.Net 不支持任何输出大小为 192 位的散列算法。那么有什么解决方案吗?
这个简单的代码是为了让它更清楚:(仅加密部分)
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;
}
在我给出(有效的)固定大小的键输入之前,此代码将不起作用。我的问题是实现这一目标的最佳方法是什么?