一、需求背景
实现一个4位数字密码的简单加密系统,规则如下:
- 输入要求:每位数字为1-9的整数
- 加密步骤:
- 步骤1:每个数字加5
- 步骤2:对结果取模10(即保留个位数)
- 步骤3:将处理后的数字顺序翻转
示例:
原密码:1234
加5取余:6 7 8 9
翻转结果:9876
最终加密密码:9876
二、代码逐模块解析
1. 主程序入口
public static void main(String[] MakeItPossible) {
int[] passwordArray = getPassword(); // 获取密码输入
String encryption = getReversedPasswordResult(passwordArray, "");
System.out.println("加密后的密码为:" + encryption); // 输出加密结果
}
- 流程控制:协调输入、加密、输出模块
2. 密码输入模块
public static int[] getPassword() {
int[] passwordArray = new int[4];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 4;) { // 注意循环变量未自动递增
System.out.print("请输入第" + (i + 1) + "位数字:");
int number = sc.nextInt();
if (number > 0 && number < 10) { // 输入验证:1-9
passwordArray[i] = number;
i++; // 仅当输入合法时递增索引
} else {
System.out.println("输入密码不符合规则!请重新输入:");
}
}
return passwordArray;
}
- 关键设计:
- 通过控制循环变量
i
的自增逻辑,实现输入错误时原地重试 - 严格的输入范围验证(1-9)
- 通过控制循环变量
3. 加密处理模块
public static int[] addEncryption(int[] passwordArr) {
int[] reversedArray = new int[passwordArr.length];
for (int i = 0; i < passwordArr.length; i++) {
// 加密公式:(原数字 +5) %10
int encryptedValue = (passwordArr[i] + 5) % 10;
// 倒序存储:索引计算 reversedArray[3-i] = encryptedValue
reversedArray[passwordArr.length - i - 1] = encryptedValue;
}
return reversedArray;
}
- 算法解析:
- 加5取余:实现数字循环位移(如8→13%10=3)
- 倒序存储:通过索引计算实现数组翻转
4. 结果拼接模块
private static String getReversedPasswordResult(int[] passwordArray, String encryption) {
int[] addEncryptionResult = addEncryption(passwordArray);
for (int i : addEncryptionResult) {
encryption += i; // 拼接为字符串
}
return encryption;
}
- 注意点:字符串拼接在循环中使用
+=
会产生临时对象,建议改用StringBuilder
优化性能
三、完整代码示例
package com.insightfuture.test;
import java.util.Scanner;
public class Encryption {
public static void main(String[] args) {
int[] passwordArray = getPassword();
String encrypted = getReversedPasswordResult(passwordArray, "");
System.out.println("加密后的密码为:" + encrypted);
}
public static int[] getPassword() {
int[] arr = new int[4];
Scanner sc = new Scanner(System.in);
for(int i=0; i<4; ) {
System.out.print("请输入第"+(i+1)+"位数字:");
int num = sc.nextInt();
if(num>0 && num<10) {
arr[i] = num;
i++;
} else {
System.out.println("输入必须是1-9之间的数字!");
}
}
return arr;
}
public static int[] addEncryption(int[] arr) {
int[] reversed = new int[arr.length];
for(int i=0; i<arr.length; i++) {
reversed[arr.length-i-1] = (arr[i] +5) %10;
}
return reversed;
}
private static String getReversedPasswordResult(int[] arr, String s) {
int[] encryptedArr = addEncryption(arr);
StringBuilder sb = new StringBuilder();
for(int n : encryptedArr) {
sb.append(n);
}
return sb.toString();
}
}
四、运行示例
请输入第1位数字:2
请输入第2位数字:5
请输入第3位数字:8
请输入第4位数字:1
加密后的密码为:6437
五、优化方向(下篇预告)
在《密码系统安全增强实战》中将探讨:
- 输入安全增强:
- 控制台输入隐藏(替代明文显示)
- 非数字输入异常处理
- 加密算法升级:
- 引入随机盐值
- 增加异或位运算
- 功能扩展:
- 支持任意长度密码
- 添加解密功能
- 性能优化:
- 使用StringBuilder替代字符串拼接
- 预计算加密映射表
预览代码片段:
// 使用Console类隐藏输入
Console console = System.console();
char[] password = console.readPassword("请输入密码:");
// 异或加密增强
int salt = new Random().nextInt(10);
int encrypted = (original + salt) % 10 ^ salt;
#Java实战 #加密算法 #网络安全 #编程教学
点赞关注,获取下篇更新提醒! 🔒🔑