Substitution Encryption/Decryption in R

狂风中的少年 提交于 2021-01-28 01:57:01

问题


Using the variables alpha and key, encrypt ptext into a variable named ctext. Using substitution cipher

So I have a text file separated in a vector

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

I also created a key for this cipher

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

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

Now my goal is to try to replace all the character in the ptext vector corresponding to the letters in the key in relation to alpha (Example: A in alpha in relation to Z in the key. So all A's in the text would be replaced by a Z)

I know I am supposed to match the alpha in key

cipher <- match(key,alpha)

Now my issue is, the ptext file is over 1000 characters in it. How would I be able to replace all the letters in that vector?


回答1:


You could use chartr which will avoid splitting the string and pasting back.

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

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

Here, all R is replaced with B, E with X and so on for every character value.




回答2:


Basically, you need to do what you are doing with the cipher but apply that to each letter of ptext. You can either leave as a vector of single strings or put back together as desired, for example using paste0 below.

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"


来源:https://stackoverflow.com/questions/60332706/substitution-encryption-decryption-in-r

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!