密码学05(序列密码)

序列密码

根据密码算法对明文信息处理的方式,对称密码体系分为分组密码和序列密码

基本概念

序列密码的明文块是以字节(8位)或以1位为单位,相比分组密码来说要更小
序列密码每一步使用的密钥的都不一样,存在一个密钥流生成器,密钥流和明文分组一样长。(避免了明文分组一样时生成的密文一样)
理论上加密安全性比分组密码好。
在这里插入图片描述

RC4序列密码

RC4序列密码算法(密钥产生算法)

RC4序列密码是一种基于非线性数据表变换的序列密码。
包含两个算法:密钥调度算法(KSA)、伪随机生成算法(PRGA)

密钥调度算法(KSA)

以一个长度为l 字节的初始密钥作为输入,以一个恒等置换的S 盒开始,常用的RC4的S盒n=8,即可以生成28 = 256 个元素的数组S,KSA初始化S,取S[ i ] = i,0 <= i <= 255,并选择0~255中的一个子序列作为密钥,填充到数组t[0],t[i],……t[255]中,如果密钥长度小于255则依次重复填充,直至被填满(例如选择567为序列,则将567反复填充到t中),令j = 0,对于i 从 0~255 循环①j = (j + S[i]+K[i]) mod 256,②交换s[i]和s[j]

		//ksa算法
        for(int i = 0; i < 256; ++i){
            S[i] = i;
            T[i] = K[i % keylen];
        }
        int j = 0;
        for(int i = 0; i < 256; ++i){
            j = (j + S[i] + T[i]) % 256;
            //交换s[i]与s[j]
            S[i] = S[i] + S[j];
            S[j] = S[i] - S[j];
            S[i] = S[i] - S[j];
        }
伪随机生成算法(PRGA)

伪随机生成算法是建立在密钥调度算之上的,KSA将数组S进行初始随机化排列后,PRGA从数组S中随机选取元素作为密钥流字节,同时修改数组S的排序。反复该过程直到生成的二进制的数量等于明文位的数量。

加密

将得到的密钥字符K与明文字符进行异或运算便可得到密文。
由于S表中可能的排列有256!个,所以可以抵抗穷举攻击。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章