《Java实战:密码加密算法实现与代码解析》

4 阅读3分钟

一、需求背景

实现一个4位数字密码的简单加密系统,规则如下:

  1. 输入要求:每位数字为1-9的整数
  2. 加密步骤
    • 步骤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

五、优化方向(下篇预告)

在《密码系统安全增强实战》中将探讨:

  1. 输入安全增强
    • 控制台输入隐藏(替代明文显示)
    • 非数字输入异常处理
  2. 加密算法升级
    • 引入随机盐值
    • 增加异或位运算
  3. 功能扩展
    • 支持任意长度密码
    • 添加解密功能
  4. 性能优化
    • 使用StringBuilder替代字符串拼接
    • 预计算加密映射表

预览代码片段

// 使用Console类隐藏输入
Console console = System.console();
char[] password = console.readPassword("请输入密码:");

// 异或加密增强
int salt = new Random().nextInt(10);
int encrypted = (original + salt) % 10 ^ salt;

#Java实战 #加密算法 #网络安全 #编程教学
点赞关注,获取下篇更新提醒! 🔒🔑