流媒体不同于一般的文件,它是“流动”的媒体文件,下面我们就来给大家讲讲用分组密码如何给流媒体文件加密。
分组密码对流媒体文件加密的方法:
常用的分组加密算法有DES、AES.IDEA和RC6加密算法等,它们 的共同特点是将明文以分组为单位进行加密处理。
我们假设算法的密钥长和分组长均为1 28位,并将加密方式分为块式加密blockEncrypt和填充式加密padEricrypt两种,以兼顾不同包长的要求,blockEncrypt方式要求明文长度必须是块长128的整倍数,所得密文与明文长度相同。padEncrypt方式对明文长度不作要求,对小于128的分组会自动填充一些附加字节,密文会比明文长一些。
在多媒体文件的流式传输中,一个文件被分为许许多多的协议数据包,分组算法是将数据包作为明文的.确定数据包长度时不仅要考虑到取分组长度的整数倍.还要兼顾网络传输的效率和可靠性需求,这样可将包长可定为1280B、19208或2560B等,但无论如何也难保证最后一个包也是块长的整数倍,因此,我们将blockEncrypt和padEncrypt两种方式结合起来,仅对最后一个数据包采用padEncrypt加密方式.而对前面所有的数据包都采用blockEncrypt加密方式,这样就可以免去处理加密时数据位的扩展问题,从而减少了处理时间和所需空间,提高了时空效率。
数据包的加密过程:
首先把一个长度为2560B的明文数据包分成1 60个长度为1 28位的分组。一个网络数据包的加密过程可以简单地描述如下:
数据包的加密算法(明文位置指针input,密文位置指针autput,...)
{
switch(加密模式){
case ECB:
For(i=0; i<(包长/128)i++)
{
//从数据包中按序对每个128位的分组进行加密
encrypt (input.output);
//定位到下一个分组,并修改加密文件位置指针
input+=16;
output+=16;
}
//若是padencypt加密需要在此处理最后一块数据,要先填充再加密......
break;
case CBC:
将分组数据与初始化向量进行按位异或操作.
encrypt (input, output);
//定位到第二个分组
inpul+=16;
For(i=0;i<(包长/128),i++)
{
将分组数据与上一组的密文结果进行按位异或操作;
//修改密文位置
output+=16;
encrypt (input,output}
//定位到下一个分组
input+=16;
}
//对padencypt式加密需在此处理最后一块数据
break;
}
return(加密的总位数);
//padencypt式加密的密文位数>明文位数
}
其中encrypt为某种加密算法下的分组加密函数,调用方式为:
erlcrypt(分组明文.分组密文......)
以上是一个数据包在服务器方的加密过程,当密文数据包到达客户方后,要按照相反的过程进行解密。加解密过程类似,但又不完全相同。
用分组密码对流媒体文件加密,方法就是这么的简便,不妨您可以操作试试。
小知识之分组密码:
分组密码是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列。