2

使用变量 alpha 和 key,将 ptext 加密为名为 ctext 的变量。使用替换密码

所以我有一个在向量中分隔的文本文件

ptext <- strsplit(ptext,split = "", fixed = TRUE)
ptext <- unlist(ptext)

我还为这个密码创建了一个密钥

key <- "ZGYHXIWJVKULTMSARBQCPDOENF"
key <- unlist(strsplit(key,""))
and an Alphabet vector for the key

alpha <- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
alpha <= toupper(alpha)
alpha <- unlist(strsplit(alpha,""))

现在我的目标是尝试替换与 alpha 相关的键中字母对应的 ptext 向量中的所有字符(例如:alpha 中的 A 与键中的 Z 相关。所以文本中的所有 A 都将替换为一个Z)

我知道我应该匹配 key 中的 alpha

cipher <- match(key,alpha)

现在我的问题是,ptext 文件中有超过 1000 个字符。我如何能够替换该向量中的所有字母?

4

2 回答 2

4

您可以使用chartrwhich 将避免拆分字符串并粘贴回来。

ptext <- 'REQWDSFFFSLK'
alpha <- 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
key   <- 'ZGYHXIWJVKULTMSARBQCPDOENF'

chartr(alpha, key, ptext)
#[1] "BXROHQIIIQLU"

在这里,所有字符的值都R被替换为B, EwithX等等。

于 2020-02-21T06:17:12.007 回答
1

基本上,您需要对密码执行您正在执行的操作,但将其应用于ptext. 您可以保留为单个字符串的向量,也可以根据需要重新组合在一起,例如使用paste0下面。

set.seed(123)
ptext <- strsplit(LETTERS[sample(26, 100, T)],split = "", fixed = TRUE)
ptext <- unlist(ptext)

key <- "ZGYHXIWJVKULTMSARBQCPDOENF"
key <- unlist(strsplit(key,""))

alpha <- unlist(strsplit(LETTERS,""))

encoded <- sapply(ptext, function(x) key[match(x, alpha)])
encoded
#>   O   S   N   C   J   R   V   K   E   T   N   V   Y   Z   E   S   Y   Y   I   C 
#> "S" "Q" "M" "Y" "K" "B" "D" "U" "X" "C" "M" "D" "N" "F" "X" "Q" "N" "N" "V" "Y" 
#>   H   Z   G   J   I   S   D   N   Q   K   G   U   L   O   J   M   G   I   I   J 
#> "J" "F" "W" "K" "V" "Q" "H" "M" "R" "U" "W" "P" "L" "S" "K" "T" "W" "V" "V" "K" 
#>   W   U   G   U   F   Y   B   E   H   L   M   R   A   Y   Y   F   U   O   I   O 
#> "O" "P" "W" "P" "I" "N" "G" "X" "J" "L" "T" "B" "Z" "N" "N" "I" "P" "S" "V" "S" 
#>   Z   P   T   F   K   H   V   V   G   P   Q   V   R   Q   B   D   M   E   V   S 
#> "F" "A" "C" "I" "U" "J" "D" "D" "W" "A" "R" "D" "B" "R" "G" "H" "T" "X" "D" "Q" 
#>   Y   T   V   Y   N   Y   W   C   H   P   L   Y   N   C   N   G   C   W   V   Z 
#> "N" "C" "D" "N" "M" "N" "O" "Y" "J" "A" "L" "N" "M" "Y" "M" "W" "Y" "O" "D" "F"

paste0(encoded, collapse = "")
#> [1] "SQMYKBDUXCMDNFXQNNVYJFWKVQHMRUWPLSKTWVVKOPWPINGXJLTBZNNIPSVSFACIUJDDWARDBRGHTXDQNCDNMNOYJALNMYMWYODF"
于 2020-02-21T05:40:40.403 回答