用密文替换字母

4

我一直在使用R的gsub2函数(R:使用gsub替换字符,如何创建函数?)来创建密文:

from<-c('s','l','k','u','m','i','x','j','o','p','n','q','b','v','w','z','f','y','t','g','h','a','e','d','c','r')
  to<-c('z','e','b','r','a','s','c','d','f','g','h','i','j','k','l','m','n','o','p','q','t','u','v','w','x','y')

例如:

原始文本:the who's 1973

密文:ptv ltn'm 1973

问题是,gsub2会将某些字母替换两次(o->f->n和s->z->n),这会破坏我的密文并使其几乎不可能解码。有人能指出我犯的错误吗?谢谢!
2个回答

7

一种方法是使用命名向量作为加密密钥。创建这样的命名向量的简单方法是使用 setNames

cipher <- setNames(to, from)
cipher
  s   l   k   u   m   i   x   j   o   p   n   q   b   v   w   z   f   y   t   g   h   a   e   d   c   r 
"z" "e" "b" "r" "a" "s" "c" "d" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "t" "u" "v" "w" "x" "y" 

对于编码函数,可以使用 strsplitpaste

encode <- function(x){
  splitx <- strsplit(x, "")[[1]]
  xx <- cipher[splitx]
  xx[is.na(xx)] <- splitx[is.na(xx)]
  paste(xx, collapse="")
}

encode("the who's 1973")
[1] "ptv ltf'z 1973"

6

你也可以使用chartr,正如你引用的问题中一个(受欢迎的:12个赞)答案中提到的:

cipher <- function(x) 
    chartr( "slkumixjopnqbvwzfytghaedcr", "zebrascdfghijklmnopqtuvwxy", x )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接