#task1
# 定义函数生成维吉尼亚密码的密码本
generateVigenereTable <- function() {
  alphabet <- c(LETTERS)
  table <- matrix(ncol = length(alphabet), nrow = length(alphabet),dimnames = list(alphabet,alphabet))
  table[1,]<- matrix(c(alphabet),ncol=26)
  for (i in 2:length(alphabet)) {
    table[i,] <- c(alphabet[-(1:(i-1))], alphabet[1:(i-1)])
  }
  
  return(table)
  
}

# 调用函数生成维吉尼亚密码的密码本
vigenereTable <- generateVigenereTable()

# 打印密码本
print(vigenereTable)






#task2
# 定义函数加密明文
encryptVigenere <- function(plaintext, keyphrase) {
  alphabet <- c(LETTERS)
  keyphrase <- toupper(keyphrase)
  keyVector <- match(strsplit(keyphrase, "")[[1]], alphabet)
  
  # 生成密码本
  vigenereTable <- generateVigenereTable()
  
  # 重复密钥以匹配明文长度
  keyVector <- rep(keyVector, length.out = nchar(plaintext))
  
  # 加密明文
  ciphertext <- sapply(1:nchar(plaintext), function(i) {
    char <- substr(plaintext, i, i)
    if (char == " ") {
      return(" ")
    } else {
      return(vigenereTable[char, keyVector[i]])
    }
  })
  
  return(paste(ciphertext, collapse = "", sep = ""))
}

# 使用关键字 "UWTSDSWANSEA" 加密消息 "CAPTURETHEFLAG"
keyphrase <- "UWTSDSWANSEA"
plaintext <- "CAPTURETHEFLAG"
ciphertext <- encryptVigenere(plaintext, keyphrase)

# 显示结果使用 print
print("Plaintext:")
print(plaintext)
print("Ciphertext:")
print(ciphertext)



#task3
# 定义函数解密密文
decryptVigenere <- function(ciphertext, keyphrase) {
  alphabet <- c(LETTERS)
  keyphrase <- toupper(keyphrase)
  keyVector <- match(strsplit(keyphrase, "")[[1]], alphabet)
  
  # 生成密码本
  vigenereTable <- generateVigenereTable()
  
  # 重复密钥以匹配密文长度
  keyVector <- rep(keyVector, length.out = nchar(ciphertext))
  
  # 解密密文
  plaintext <- sapply(1:nchar(ciphertext), function(i) {
    char <- substr(ciphertext, i, i)
    if (char == " ") {
      return(" ")
    } else {
      # 解密的过程
      decryptedChar <- alphabet[(match(char, vigenereTable[, keyVector[i]]) - 1) %% 26 + 1]
      return(decryptedChar)
    }
  })
  
  return(paste(plaintext, collapse = ""))
}

# 使用关键字 "RPROGRAMMING" 解密密文
keyphrase_decrypt <- "RPROGRAMMING"
ciphertext_decrypt <- "ETMSXWISTBNHRIKZKKHMFGBAUDECZEEQPBBCZC"
plaintext_decrypt <- decryptVigenere(ciphertext_decrypt, keyphrase_decrypt)

# 显示结果使用 print
print("Ciphertext:")
print(ciphertext_decrypt)
print("Decrypted Plaintext:")
print(plaintext_decrypt)