能力值:
( LV2,RANK:10 )
|
-
-
2 楼
你的这个理解是不完全正确的,在使用时有个初始化过程,经过伪随机子密码生成算法的处理后进而得到得到不同的子密钥序列。但是由于存在部分弱密钥,使得子密钥序列在不到100万字节内就发生了完全的重复,如果是部分重复,则可能在不到10万字节内就能发生重复,因此,在使用RC4算法时,一般都对加密密钥进行测试,判断其是否为弱密钥。而且,RC4密钥长度达到128位,基本不能被分析出来。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
非常感谢你的回答
你说的子密钥序列生成与一个"伪随机子密码"有关没错, 但是你每次对一串数据加密的时候, 如果这个"伪随机子密码"生成算法不变的话, 初始化之后的密钥应该都是相同的对吧?
那么这个时候我放一串0进去, 通过异或不就可以得到这串密钥了?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
你要知道这个密钥是随机产生的啊,不是每次固定不变的。但因为是伪随机所以存在被攻击破解的可能。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
如果初始密钥是随机的就说得过去了, 我刚开始想这个问题的时候, 觉得加密方用了某个随机产生的密钥, 那么解密方为了解密就需要这段密钥了, 密钥要是挺长的话, 数据传输是个问题啊...
Anyway, thanks a lot
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
def rc4(data, key):
x = 0
box = range(256)
for i in range(256):
x = (x + box[i] + key[i % len(key)]) % 256
box[i], box[x] = box[x], box[i]
x = 0
y = 0
out = []
for char in data:
x = (x + 1) % 256
y = (y + box[x]) % 256
box[x], box[y] = box[y], box[x]
out.append(chr(ord(char) ^ box[(box[x] + box[y]) % 256]))
return ''.join(out)
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
没错, LS写的伪代码就是RC4算法, 我想指出的就是这个box的变换实际上是固定的, 只要固定了key之后.
因此要保证其安全性可能就是要不断地改变key吧
|
|
|