我开始从一本书中读到RC4,但无法正确理解一些短语。
RC4算法非常简单,易于理解。可变长度键从1到256字节用于初始化256字节状态向量S。S在任何时候都包含从0到255的所有8位数的排列。
根据上面的解释,如果假设我们使用Java作为我们的编程语言
请帮助我,因为我感到迷失在我的第一章学习密码学。
发布于 2015-02-23 13:17:54
RC4是按顺序应用的,不管简单字符的长度是多少。有时一个字符是一个字节,但今天这些(旧的)字符意味着字节。为了与当前实现保持一致,对于ASCII-字符(序数小于128的字符),您应该切分包含零的(上)字节。“密码”的长度为8,将在初始排列步骤中应用32次。否则,如果只有“第二个”字节被有效地用于排列,排列数组将包含工件。
RC4的KSA
for i from 0 to 255
j := (j + S[i] + key[i mod keylength]) mod 256
swap values of S[i] and S[j]
endfor如果您每个ascii char使用2个字节,其中一个字节将包含一个"0“的每秒钟字节。对于每秒钟的密码字节,密钥调度算法将减少到:
for i from 0 to 255
j := (j + S[i] + 0) mod 256
swap values of S[i] and S[j]
endfor他使S的排列和内心状态得到了充分的利用。如果第一个密码字节为空,则S0将与S0交换,这根本不是交换。我建议你在这个问题上做一些实验--这对你来说可能很有趣-- S0以后可能会被交换,但也许不会。它也可以与其他不幸的字节中的一个进行交换。这可能导致S我的某些值或多或少地保持不变的排列值。
该算法的安全性依赖于S.的排列的保密性,但如果你能通过知道一些密码属性来猜出S的一些字节,就可以有效地减少攻击者的不确定性.
流密码本身是按字节顺序应用的。RC4伪随机流是字节流,要加密的数据是字节流。
数组S的长度为256个字节,它只包含每一个可能的字节(8位=> 2^8)一次。从一开始,S就这样被命令,S0=0 ..S255=255。每个密码字节将相互交换两个元素。从0到255的所有元素仍然存在,但不像以前那样在位置上。S是应用密码后的内部状态(这个状态是隐藏的/秘密的,除了你以外任何人都不知道)。您的密码是关键,如何创建这个特殊的,希望唯一的排列。
hth。请问我是否漏掉了什么解释。
https://softwareengineering.stackexchange.com/questions/274142
复制相似问题