除了根据密钥是否对称将密码算法分类,也能借助明文的处理方式分类算法。若把明文空间的元素逐个加密,叫做流密码或序列密码;若把明文空间的元素分组,逐组加密,叫做分组密码。
对于流密码,解密时通过同步得到的密钥流进行解密变换。流密码强度由密钥流生成器生成的序列的随机性和不可预测性确定。若密钥流是真的随机数流,则理论上此体制不能破译,也就是一次一密,但此方式需要的密钥量大得出乎意外。如今通常用伪随机序列替换随机序列作密钥序列。伪随机数序列有一定的循环周期,若周期够长,则会有较好的保密性。
伪随机数密钥流生成器有多种结构,多数是用线性或非线性反馈移位寄存器作驱动器得到一系列状态序列,这些状态序列通过非线性组合后产生密钥序列。流密码加解密的工作原理特别直观。用密钥序列k加密明文序列m就是把k与m对应的分量执行模2相加,得到加密后的密文序列c。在接收端,合法接收者的解密则是把c与k的对应分量执行模2相加,也就是得到原来的明文序列m。
流密码体制的一个优点是每比特的密文数据与其他密文比特无关。这样尽管一个密文位出现了错误,对整个数据段也无太明显影响。流密码加解密速度很快,应用较普遍,如GSM网络中的数据加密算法。但流密码需使收发端密钥流的同步是完全准确的。和流密码比较,分组密码可轻易达到同步。分组密码的主要不足体现在这两个方面:一是分组加密无法隐藏数据模式,也就是相同的密文组含有相同的明文组;二是分组加密不可抵抗重放、嵌入与删除等攻击。但分组密码的以上不足可在加密处理中融入少许的记忆解决。流密码和分组密码各有优点与不足,如何选用应根据具体应用场景决定。