前面介绍的块密码(Block Cipher)一次处理一个输入块,对于每一个明文块/密文块,以相同的方式完整地使用一遍由密钥K生成的子密钥。流密码(Stream Cipher)连续地处理输入元素,生成输出元素,对每一个元素,仅使用由密钥K生成的一部分子密钥(按顺序使用)。典型的流密码一次加密一个字节的明文,当然它也可以被设计成一次加密一位或比一个字节更大的数据单元。尽管块密码更加常见,但是在某些应用中,流密码更加合适。
图2-8是流密码结构的示意图。“伪随机字节生成器”把密钥K作为输入,输出一个随机的8 bit数字流。在不知道密钥K的情况下,这个伪随机的数字流是不可预测的,并且具有随机性。在流密码中,这个数字流被称作密钥流。将它逐字节地与明文字节异或,就生成密文字节流。因为异或的特性,将密文字节流与密钥流逐字节异或,就得到明文字节流。
图2-8 流密码结构
如果使用设计恰当的伪随机数生成器,流密码可以与具有适当密钥长度的块密码一样安全。与块密码相比,流密码的主要优势是速度更快,代码更少。块密码的优势是可以重复使用密钥。对于需要对数据流进行加密/解密的应用程序,如在一个数据通信的通道上或者一个浏览器/Web链接,流密码可能是更好的选择。对于处理数据块的应用程序,如文件传输、电子邮件和数据库,块密码可能更加合适。尽管如此,流密码和块密码实际上可以用在任何应用中。(www.daowen.com)
RC4是知名的流密码算法。它是一个密钥长度可变(1~256 Byte)的、面向字节操作的流密码算法。该算法以随机置换为基础。分析表明这个算法的密钥流的周期可能超过10100。其运算速度非常快。RC4用在Web浏览器和服务器之间进行安全通信时使用的SSL/TLS协议中,也用在IEEE 802.11无线局域网标准的WEP(Wired Equivalent Privacy)和WPA(WiFi Protected Access)协议中。
RC4算法相当简洁:使用密钥K来初始化一个256 Byte的状态矢量S。用S [0]、S [1]、...、S [255]来表示S的256个元素。任何时候,S都包含了从0到255的所有整数的一个置换。以一种系统的方式从S的256个元素中选择一个元素作为子密钥k,用于当前的加密或解密,也就是与明文或密文字节进行异或操作。每选出一个子密钥,S中的元素都被置换一次。
RC4算法的C语言代码如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。