当待加密明文长度为任意长时,如何使用DES算法来进行加密呢
发布网友
发布时间:2022-05-06 13:12
我来回答
共2个回答
热心网友
时间:2022-06-30 16:51
由于DES加密要求明文分组为64比特位的长度,当明文长度为任意时,我认为可以有两种方式来进行分组:(1)第一种方式:首先必须计算出明文的总长度,然后根据计算结果进行判定。如果明文长度为64的整数倍,则可以直接进行分组加密;如果明文长度不是64的整数倍,则可以在明文最后进行填充,使其长度为64的整数倍。最后再对明文进行分组,然后对各个明文分组进行加密。(2)第二种方式:不必计算明文的总长度,直接将明文进行分组加密。如果在分组的过程中发现某一组(只可能是最后一个分组)长度不足64比特位时,再对该组进行填充,然后再进行加密。
热心网友
时间:2022-06-30 16:51
不知道你用什么语言,下面是C#的写法。在C#里使用对称加密不考虑明文大小,因为明文被处理成流.
public class TestClass
{
static void Main(string[] args)
{
byte[] key = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
byte[] iv = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
byte[] bytes = Encoding.UTF8.GetBytes("任意长度字符串");
byte[] enBytes = Encrypt(bytes, key, iv);
}
static byte[] Encrypt(byte[] bytes, byte[] key, byte[] iv)
{
MemoryStream ms = new MemoryStream();
DESCryptoServiceProvider desCsp = new DESCryptoServiceProvider();
desCsp.BlockSize = iv.Length * 8;
CryptoStream cs = new CryptoStream(ms, desCsp.CreateEncryptor(key, iv), CryptoStreamMode.Write);
cs.Write(bytes, 0, bytes.Length);
cs.FlushFinalBlock();
cs.Close();
desCsp.Clear();
return ms.ToArray();
}
}