Java 实现单字母密码

Java 实现单字母密码

在这个问题中,我们需要使用单字母密码技术将文本转换为密码文本。

在单字母密码算法中,所有字母字符都被预先映射到它们的密码字符上。因此,我们需要用映射的字符替换所有纯文本字符。

下面是包含字符映射的表格。

a\mathrm{\rightarrow;}Q

b \mathrm{\rightarrow;} W

c\mathrm{\rightarrow;}E

d\mathrm{\rightarrow;}R

e\mathrm{\rightarrow;}T

f\mathrm{\rightarrow;}Y

g \mathrm{\rightarrow;}U

h\mathrm{\rightarrow;}I

i\mathrm{\rightarrow;}O

j\mathrm{\rightarrow;}P

k\mathrm{\rightarrow;}A

l\mathrm{\rightarrow;}S

m\mathrm{\rightarrow;}D

n\mathrm{\rightarrow;}F

o\mathrm{\rightarrow;}G

p\mathrm{\rightarrow;}H

q\mathrm{\rightarrow;}J

r\mathrm{\rightarrow;}K

s\mathrm{\rightarrow;}L

t\mathrm{\rightarrow;}Z

u\mathrm{\rightarrow;}X

v\mathrm{\rightarrow;}C

w\mathrm{\rightarrow;}V

x\mathrm{\rightarrow;}B

y\mathrm{\rightarrow;}N

z\mathrm{\rightarrow;}M

在上面的映射中,我们可以看到字母字符映射到键盘上的字符序列。

注意 - 除了字母字符外,我们需要保留所有其他字符。

问题描述 - 我们以字符串格式给出了纯文本。我们需要使用单字母密码技术将其转换为密码文本。

示例

输入

str = 'This is a normal string!'

输出

'ZIOL OL Q FGKDQS LZKOFU!'

解释 - 根据映射表,所有字符都映射到一个特定的字符。

输入

str = 'ab'

输出

'QW'

说明 - 这里,a -> Q,b -> W。密文是’QW’。

输入

str = "How are you?"

输出

IGV QKT NGX?

解释 - 我们将字符映射加密。

方法1

在这个方法中,我们可以使用映射或数组数据结构来存储每个字符的映射关系。然后,我们遍历明文的每个字符,并用映射的字符替换它。

算法

步骤1 - 定义包含所有字母字符顺序的“alphabeticalChars”数组。

步骤2 - 定义“mappingChar”来存储与字母相关的映射字符。

步骤3 - 定义encryptStr()函数来加密明文。

步骤3.1 - 在encryptStr()函数中,用一个空字符串初始化’e_srt’以存储加密字符串。

步骤3.2 - 使用循环遍历字符串。同时,使用嵌套循环在’alphabeticalChars[]’数组中找到当前字符的索引。

步骤3.3 - 如果在数组中找到字符的索引,从找到的索引中获取映射字符,并将其附加到e_str字符串上。

步骤3.4 - 如果字符不是小写字母,则将其原样附加到e_Str字符串上。

步骤3.5 - 返回e_str字符串。

步骤4 - 定义decryptStr()函数来解密加密字符串。

步骤4.1 - 在decryptStr()函数中,用一个字符串’d_str’来存储明文。

步骤4.2 - 开始遍历密文。同时,使用嵌套循环遍历’mappingChars’数组并找到当前字符的索引。

步骤4.3 - 如果字符是字母,根据找到的索引从alphabeticalChars数组中获取明文字符,并将其附加到d_str字符串上。如果字符是特殊字符,则原样附加。

步骤4.4 - 返回d_str字符串。

代码

import java.io.*;
public class Main {
   // array of alphabets
   public static char alphabeticalChars[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
   // array of mapped alphabets
   public static char mappingChars[] = { 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Z', 'X', 'C', 'V', 'B', 'N', 'M' };
   // Encrypting the string
   public static String encryptStr(String str) {
      String e_str = "";
      // traverse the string
      for (int p = 0; p < str.length(); p++) {
         for (int q = 0; q < 26; q++) {
            // match the alphabets of the string with the array's alphabets
            if (str.charAt(p) == alphabeticalChars[q]) {
               e_str += mappingChars[q];
               break;
            }
            // If the character is a special character, add it as it is
            if (str.charAt(p) < 'a' || str.charAt(p) > 'z') {
               e_str += str.charAt(p);
               break;
            }
         }
      }
      return e_str;
   }
   public static String decryptStr(String str) {
      String d_str = "";
      // traverse the string
      for (int p = 0; p < str.length(); p++) {
         for (int q = 0; q < 26; q++) {
            // match characters
            if (str.charAt(p) == mappingChars[q]) {
               d_str += alphabeticalChars[q];
               break;
            }
            // For special characters
            if (str.charAt(p) < 'A' || str.charAt(p) > 'Z') {
               d_str += str.charAt(p);
               break;
            }
         }
      }
      return d_str;
   }
   public static void main(String args[]) {
      String str = "This is a normal string!";
      System.out.println("Normal text is : " + str);
      System.out.println(" ");
      // Encryption part
      String e_str = encryptStr(str.toLowerCase());
      System.out.println("Encrypted string is : " + e_str);
      // decryption part
      System.out.println("Decrypted string is : " + decryptStr(e_str));
   }
}

输出

Normal text is : This is a normal string!
Encrypted string is : ZIOL OL Q FGKDQS LZKOFU!
Decrypted string is : this is a normal string!

时间复杂度 - O(N),因为我们需要遍历明文进行加密和解密。

空间复杂度 - O(N),因为我们使用字符串来存储密文。

简单替换密码很容易实现,我们只需要将字母字符替换为映射字符。而且,它会保留数字和特殊字符。

简单替换密码提供了非常低级别的安全性,因为我们将每个明文字符替换为固定字符。所以,它保持了字符的频率不变。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程