【问题标题】:Substitution Encryption/Decryption in RR中的替换加密/解密
【发布时间】:2020-06-05 12:46:48
【问题描述】:

使用变量 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,""))

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

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

cipher <- match(key,alpha)

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

【问题讨论】:

    标签: r encryption cryptography variable-substitution


    【解决方案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"
    

    【讨论】:

      【解决方案2】:

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

      ptext <- 'REQWDSFFFSLK'
      alpha <- 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
      key   <- 'ZGYHXIWJVKULTMSARBQCPDOENF'
      
      chartr(alpha, key, ptext)
      #[1] "BXROHQIIIQLU"
      

      这里,所有的R 都被B 替换,E 被X 替换,以此类推。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-13
        • 1970-01-01
        • 2019-08-02
        • 1970-01-01
        • 2018-12-12
        • 1970-01-01
        • 2018-08-16
        相关资源
        最近更新 更多