如何创建加密字母表动态变化的替换密码,实现Java明文加密功能?
动态替换加密功能实现方案
核心思路
你只需要调用String自带的toCharArray()方法就能把动态传入的encryptalpha字符串转为char数组,不需要提前写死,再配合你计划的嵌套循环就能完成映射替换。
完整实现代码
public static String encrypt(String plaintext, String encryptalpha) { // 标准字母表 char[] alpha = { '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' }; // 入参合法性校验,避免后续逻辑出错 if (plaintext == null || plaintext.isEmpty()) { return ""; } if (encryptalpha == null || encryptalpha.length() != 26) { throw new IllegalArgumentException("加密字母表必须为26位字符"); } // 动态把传入的加密字母表转为char数组 char[] encryptAlphaArr = encryptalpha.toCharArray(); StringBuilder ciphertext = new StringBuilder(); // 遍历明文中的每个字符 for (int i = 0; i < plaintext.length(); i++) { char currentChar = plaintext.charAt(i); boolean matched = false; // 匹配标准字母表的下标,对应到加密字母表的同下标字符 for (int j = 0; j < 26; j++) { if (alpha[j] == currentChar) { ciphertext.append(encryptAlphaArr[j]); matched = true; break; } } // 非小写字母的字符(如大写、数字、符号)直接保留原字符,可根据需求调整为抛出异常或者转小写后加密 if (!matched) { ciphertext.append(currentChar); } } return ciphertext.toString(); }
逻辑说明
- 动态字母表转换:
encryptalpha.toCharArray()会根据每次传入的加密字母表实时生成char数组,完全适配动态变化的需求 - 映射逻辑:标准字母表和加密字母表是下标一一对应的关系,找到明文字符在标准字母表的下标
j,直接取加密字母表下标j的字符就是对应的密文字符 - 兼容性处理:代码里对非小写字母的字符做了保留处理,你可以根据业务需求调整规则
可选优化方案
如果明文长度很长,嵌套循环的效率会偏低,可以提前构建映射表减少遍历次数:
// 提前构建映射关系,只需要遍历26次 Map<Character, Character> encryptMap = new HashMap<>(); for (int j = 0; j < 26; j++) { encryptMap.put(alpha[j], encryptAlphaArr[j]); } // 遍历明文直接查表,不需要内层循环 for (int i = 0; i < plaintext.length(); i++) { char currentChar = plaintext.charAt(i); ciphertext.append(encryptMap.getOrDefault(currentChar, currentChar)); }
内容的提问来源于stack exchange,提问作者PurplePetal
相关产品推荐
相关产品推荐

