Java实现数据加密与解密-Day03

Java实现数字的加密与解密功能—Day03

实现思路

利用面向对象的知识,用两个类来进行功能的实现

  1. 数字加密
  • 定义一个方法来获取输入的密码的每一位数字,将获取到的数字存储到一个数组中

  • 定义一个方法将数组中的每一位数都+5

  • 定义方法将数组中的数字反转并输

    2.数字解密(利用反向思维)

  • 反转

  • 求差

  • 输出明码

公共类代码
public class digitalEncrypt {
    static Scanner scan = new Scanner(System.in);
    public static void main(String[] args) {
        do {
            System.out.println("输入0:明码加密\n"+"输入1:暗码解密");
            System.out.println("请输入对应的数字选择功能:");
            int cs = scan.nextInt();
            if ( cs == 0){
                System.out.println("欢迎使用加密功能!\n"+"/********************/");
                digitalEncrypt Main = new digitalEncrypt();
                System.out.println("请输入您的密码:");
                int number = scan.nextInt();
                dataEncrypt Main1 = new dataEncrypt();
                Main1.setResult(number);
                int password = Main1.getResult();
                System.out.println("加密中!\n"+"/********************/");
                System.out.println("加密完成:"+password);
                System.out.println();
                break;
            }else if (cs == 1){
                System.out.println("欢迎使用解密功能!\n"+"/********************/");
                DataDecrypt Main1 = new DataDecrypt();
                System.out.println("请输入您的密码:");
                int number = scan.nextInt();
                Main1.setPassword(number);
                Main1.setArray(Main1.getPassword());
                int[] array1 = Main1.getArray();
                Main1.setJArray(array1);
                int [] array2 = Main1.getJArray();
                Main1.setResult(array2);
                int result = Main1.getResult();
                System.out.println("解密中!\n"+"/********************/");
                System.out.println("解密完成:"+result);
                System.out.println();
                break;
            }else {
                System.out.println("请输入正确功能。");
            }
        }while (true);
    }
}
加密类
class dataEncrypt{
    private static int result;
    //把整数上的每一位都添加到数组中
    public static void setResult(int x){
        //计算数组的长度
        int count = 0; //计数器
        int tem = x;//缓存器
        while (x != 0){
            x /= 10;
            count++;
        }
        int [] array = new int[count];
        int Index = array.length-1;//伪索引
        while (tem != 0){
            int digital = tem % 10;
            tem /= 10;
            array[Index] = digital;
            Index--;
        }
        //加密1 每位数加上5
        for (int i = 0; i < array.length; i++) {
            array[i] += 5;
        }
        //加密2 每位数%10
        for (int i = 0; i < array.length; i++) {
            array[i] = array[i] % 10;
        }
        //加密3 数字反转
        for (int i = 0,j= array.length-1; i < j; i++,j--) {
            int tem1 = array[i];
            array[i] = array[j];
            array[j] = tem1;
        }
        //密码拼接
        int result1= 0;
        for (int i = 0; i < array.length; i++) {
            result1 = result1 * 10 + array[i];
        }
        result = result1;
    }
    public static int getResult(){
        return result;
    }
}
解密类
class DataDecrypt{
    static DataDecrypt this1  = new DataDecrypt();
    private static int password;
    private static int[] array;
    private static int[] JArray;
    private static int Result;
    public static void setPassword(int x){
    if (x>=0){
        password = x;
    }else {
        System.out.println("非法数据!");
    }
    }
    public static int getPassword(){
    return password;
    }
    public static void setArray(int x){

        //计算数组的长度
        int count = 0; //计数器
        int tem = x;//缓存器
        while (x != 0){
            x /= 10;
            count++;
        }
        //将每位数都放置入数组中
        this1.array = new int[count];
        int Index = 0;//伪索引
        while (tem != 0){
            int digital = tem % 10;
            tem /= 10;
            array[Index] = digital;
            Index++;
        }
    }
    public static int[] getArray(){
        return array;
    }
    //由于加密是对10取余,现在需要对数字的范围进行判断
    //分析:
    //1.
    public static void setJArray(int[] array){
        this1.JArray = new int[array.length];
        for (int i = 0; i < array.length; i++) {
            if (array[i]>=0 && array[i]<=4){
                array[i]+=10;
            }
            JArray[i] = array[i];
        }
    }
    public static int[] getJArray(){
    return JArray;
    }
    public static void setResult(int[] array){
        this1.Result = 0;
        for (int i = 0; i < array.length; i++) {
            array[i] -= 5;
        }
        for (int j = 0; j < array.length; j++) {
            Result = Result * 10 + array[j];
        }
    }
    public static int getResult(){
        return Result;
    }
}

完整代码

package com.java.exercise;

import com.sun.tools.javac.Main;

import java.util.Scanner;

//Author:Yh

/**
 * A system's numeric password (greater than 0), such as 1983, is transmitted encrypted.
 * The rules are as follows:
 * First get each digit, then add 5 to each number, then balance 10, and finally reverse all the numbers to get a new string.
 * 分析:
 * 1.数字加密
 * 1)定义一个方法来获取输入的密码的每一位数字,将获取到的数字存储到一个数组中
 * 2)定义一个方法将数组中的每一位数都+5
 * 3)定义方法将数组中的数字反转并输出
 * 2.数字解密(利用反向思维)
 * 1)反转
 * 2)求差
 * 3)输出明码
 */
public class digitalEncrypt {
    static Scanner scan = new Scanner(System.in);

    public static void main(String[] args) {
        do {
            System.out.println("输入0:明码加密\n" + "输入1:暗码解密");
            System.out.println("请输入对应的数字选择功能:");
            int cs = scan.nextInt();
            if (cs == 0) {
                System.out.println("欢迎使用加密功能!\n" + "/********************/");
                digitalEncrypt Main = new digitalEncrypt();
                System.out.println("请输入您的密码:");
                int number = scan.nextInt();
                dataEncrypt Main1 = new dataEncrypt();
                Main1.setResult(number);
                int password = Main1.getResult();
                System.out.println("加密中!\n" + "/********************/");
                System.out.println("加密完成:" + password);
                System.out.println();
                break;
            } else if (cs == 1) {
                System.out.println("欢迎使用解密功能!\n" + "/********************/");
                DataDecrypt Main1 = new DataDecrypt();
                System.out.println("请输入您的密码:");
                int number = scan.nextInt();
                Main1.setPassword(number);
                Main1.setArray(Main1.getPassword());
                int[] array1 = Main1.getArray();
                Main1.setJArray(array1);
                int[] array2 = Main1.getJArray();
                Main1.setResult(array2);
                int result = Main1.getResult();
                System.out.println("解密中!\n" + "/********************/");
                System.out.println("解密完成:" + result);
                System.out.println();
                break;
            } else {
                System.out.println("请输入正确功能。");
            }
        } while (true);
    }
}

class dataEncrypt {
    private static int result;

    //把整数上的每一位都添加到数组中
    public static void setResult(int x) {
        //计算数组的长度
        int count = 0; //计数器
        int tem = x;//缓存器
        while (x != 0) {
            x /= 10;
            count++;
        }
        int[] array = new int[count];
        int Index = array.length - 1;//伪索引
        while (tem != 0) {
            int digital = tem % 10;
            tem /= 10;
            array[Index] = digital;
            Index--;
        }
        //加密1 每位数加上5
        for (int i = 0; i < array.length; i++) {
            array[i] += 5;
        }
        //加密2 每位数%10
        for (int i = 0; i < array.length; i++) {
            array[i] = array[i] % 10;
        }
        //加密3 数字反转
        for (int i = 0, j = array.length - 1; i < j; i++, j--) {
            int tem1 = array[i];
            array[i] = array[j];
            array[j] = tem1;
        }
        //密码拼接
        int result1 = 0;
        for (int i = 0; i < array.length; i++) {
            result1 = result1 * 10 + array[i];
        }
        result = result1;
    }

    public static int getResult() {
        return result;
    }
}

class DataDecrypt {
    static DataDecrypt this1 = new DataDecrypt();
    private static int password;
    private static int[] array;
    private static int[] JArray;
    private static int Result;

    public static void setPassword(int x) {
        if (x >= 0) {
            password = x;
        } else {
            System.out.println("非法数据!");
        }
    }

    public static int getPassword() {
        return password;
    }

    public static void setArray(int x) {

        //计算数组的长度
        int count = 0; //计数器
        int tem = x;//缓存器
        while (x != 0) {
            x /= 10;
            count++;
        }
        //将每位数都放置入数组中
        this1.array = new int[count];
        int Index = 0;//伪索引
        while (tem != 0) {
            int digital = tem % 10;
            tem /= 10;
            array[Index] = digital;
            Index++;
        }
    }

    public static int[] getArray() {
        return array;
    }

    //由于加密是对10取余,现在需要对数字的范围进行判断
    //分析:
    //1.
    public static void setJArray(int[] array) {
        this1.JArray = new int[array.length];
        for (int i = 0; i < array.length; i++) {
            if (array[i] >= 0 && array[i] <= 4) {
                array[i] += 10;
            }
            JArray[i] = array[i];
        }
    }

    public static int[] getJArray() {
        return JArray;
    }

    public static void setResult(int[] array) {
        this1.Result = 0;
        for (int i = 0; i < array.length; i++) {
            array[i] -= 5;
        }
        for (int j = 0; j < array.length; j++) {
            Result = Result * 10 + array[j];
        }
    }

    public static int getResult() {
        return Result;
    }
}
运行展示:

加密
在这里插入图片描述

解密
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值