如何从用户输入获取固定大小的密钥

时间:2014-06-08 04:26:07

标签: c# padding tripledes

只是想知道,如果我使用TripleDES加密(keysize(168)192bits)并向用户询问密钥,并且用户提供的密钥可能或多或少大小比较根据密码的实际大小,我该怎么办?我应该只使用String.PadLeftString.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;
    }

在我给出(有效的)固定大小键输入之前,此代码不起作用。我的问题是实现这一目标的最佳方法是什么?

0 个答案:

没有答案