流密码的 C 语言实现
背景
流密码是密码体制中一个重要分支。20 世纪 50 年代,数字电子技术的发展使密钥可以方便
地利用以移位寄存器为基础的电路来产生,这促使线性和非线性移位寄存器理论迅速发展。
有效的数学工具,如代数和谱分析理论的引入,使得流密码理论迅速发展和走向较成熟的阶
段。同时,由于实现简单、速度快、没有或只有有限的错误传播,使流密码在实际应用,特
别是在专用和机密机构中仍保持着优势。目前,已提出多种类型的流密码,但大多是以硬件
实现的专用算法,尚无标准化的流密码算法。
加解密的原理:
在流密码中,明文按一定长度分组后被表示成一个序列,并称为明文流,序列中的一项称为
一个明文字。加密时,先由主密钥产生一个密钥流序列,该序列的每一项和明文字具有相同
的比特长度,称为一个密钥字。然后依次把明文流和密钥流中的对应项输入加密函数,产生
相应的密文字,由密文字构成密文流输出。即
设明文流为:M=m1 m2…mi…
密钥流为:K=k1 k2…ki…
则加密算法为:C=c1 c2…ci…=Ek1(m1)Ek2(m2)…Eki(mi)…
解密算法为:M=m1 m2…mi…=Dk1(c1)Dk2(c2)…Dki(ci)…
优点:
1. 在硬件实施上,流密码的速度一般要比分组密码快,而且不需要有很复杂的硬件电路;
2. 在某些情况下(例如对某些电信上的应用),当缓冲不足或必须对收到的字符进行逐一
处理时,流密码就显得更加必要和恰当;
3. 流密码有较理想的数学分析工具,如频谱理论和技术、代数方法等;
4. 流密码能较好地隐藏明文的统计特征。
加解密算法
1.加密算法:
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
int main()
{
char plaintext[500];
int i;