その非常に単純なコード。しかし、私が理解していないのBlocksizeは、 が 8 バイトの場合、Cipher サイズが 16 バイトであるのはなぜですか? と同じになると予想していますBlocksize。単純な考え方から、私は 64 ビットを平文として与え、64 ビットを暗号として持つことを期待しています。そして、ここでパディングを行う理由が本当にわかりません。8bytes( Blocksize) ごとに Cipher が 8 バイトずつ増えるようです。16bytes Block が 24bytes Cipher などになる。本当に知りたいです。
好奇心のために、8バイトブロックから8バイト暗号を使用する可能性/方法はありますか?
3DES コード: (暗号化部分のみ)
static void Main(string[] args)
{
Console.WriteLine("Enter Plain Text: ");
string original =Console.ReadLine();
TripleDESCryptoServiceProvider myTripleDES = new TripleDESCryptoServiceProvider();
byte[] encrypted = EncryptStringToBytes(original,myTripleDES.Key, myTripleDES.IV);
string encrypt = Convert.ToBase64String(encrypted);
string decrypted = DecryptStringFromBytes(encrypted,myTripleDES.Key, myTripleDES.IV);
Console.WriteLine("encryted: " +encrypt);
Console.WriteLine("decrypted: " +decrypted);
Console.ReadLine();
}
static byte[] EncryptStringToBytes(string plainText, byte[] Key, byte[] IV)
{
byte [] data= Encoding.UTF8.GetBytes(plainText);
Console.WriteLine("The Block length: " +data.Length);
TripleDESCryptoServiceProvider tdsAlg = new TripleDESCryptoServiceProvider();
tdsAlg.BlockSize = 64;
tdsAlg.KeySize = 128;
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;
}
