知りたいのですが、TripleDES暗号化(keysize(168)192ビット)を使用してユーザーにキーを尋ね、ユーザーが実際の暗号のサイズと比較して多かれ少なかれサイズのキーを提供した場合、どうすればよいですか?キーにString.PadLeft またはを使用して 0 または 1 を追加するだけですか? String.PadRightキーにランダムな文字列を追加する組み込みのメソッド/アイデア/ライブラリ/トリッキーなコードはありますか? もしそうなら、プロセスを逆にすることは可能ですか?
ハッシュ アルゴリズムを使用することを望んでいましたが、.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;
}
このコードは、(有効な) 固定サイズのキー入力を与えるまで機能しません。私の質問は、これを達成するための最良の方法は何ですか?