【发布时间】:2020-03-06 08:48:06
【问题描述】:
我正在尝试创建一个 R 函数,该函数将采用种子和密钥长度来生成 RC4 密钥流。
以下是我目前所拥有的:
library(numbers)
library(seqinr)
library(compositions)
rc4_genkey <- function(seed,keylength){
keystream <- vector(mode="integer", length=keylength)
# initialized S vector
s <- vector(mode="integer", length=255)
for(i in 1:255){
s[i + 1] = i+1
}
# initialize k vector with seed
key <- utf8ToInt(seed)
n <- length(key)
k <- vector(mode="integer", length=256)
for (i in 1:255){
k[i + 1] = key[mod(i+1, n)+1]
}
# Rc4 algorithm randomize 2 with 256 iterations
for (i in 1:255){
j <- (mod(j + s[i+1] + k[i+1], 256))
swap(s[i + 1], s[j])
}
# generate keystream of keystream length
for(i in 0:length(keystream)){
i <- mod((i + 1),256)
j <- mod((j + s[i]), 256)
swap(s[i+1],s[j+1])
t <- mod((s[i] + s[j]),256)
k[i] <- s[t]
keystream[i] <- k[i]
}
}
Now every time I run the function, it keeps telling me
"s[i + 1] <- s[j + 1] : replacement has length zero"
希望得到一些帮助来解决这个问题以运行正确的 rc4 加密
【问题讨论】:
-
请将所有非基本的
library调用声明为object 'j' not found并修复代码问题,以便有人可以复制您的问题。 -
我不是
r的程序员,但如果我是,我希望能找到缩进和间隔良好的代码。你试图在一个函数中做太多事情,把它分开! -
请注意,目前 RC4 主要具有历史意义。我猜这是一个易于实现的密码,这使它成为流密码的一个很好的介绍。但请不要在现代协议/用例中使用它。它有偏见、棘手的密钥设置,并且不允许单独的 IV...
-
@MaartenBodewes 我同意,但不幸的是,对于某些任务,例如读取旧的加密 pdf 文件,仍然需要 rc4 实现。我认为较新的使用 AES
标签: r encryption rc4-cipher stream-cipher