0


Java小案例----数字密码的加密与解密

在数据传输中,为了网络安全,数字的加密极为重要,以下将说明Java是如何将四位数字密码进行加密和解密的过程!

本例题如下:

1.对数字的加密:

需要对数字加密,具体思路就是将数据先进行加五操作,然后进行对十取余,最后在进行逆置操作。首先就得输入数字,比如输入一个整形的四位数字,如果当靠一个四位数字可能操作会受限,所以为了对数字有一个更好的操作,所以我们需要将四位数字的每一位都放进一个数组里面,方面处理!需定义一个打包方法,将四位数字打包为一个数字!

    public static int[] pack(int result) {
        int arr[] = new int[4];
//        arr[0] = result / 1000 % 10;
//        arr[1] = result / 100 % 10;
//        arr[2] = result / 10 % 10;
//        arr[3] = result % 10;
//        由以上规律不难推到下面的批量操作!
        for (int i = 0; i < arr.length; i++) {
            arr[i] = result%10;
            result /= 10;
        }
        return arr;
}

接着便可以对其进行进一步的操作,按照需求,需要将其数字每一位都进行加五以及对十取余的操作,最后在进行数字的逆置,便完成对数字的解密工作。于是定义了如下方法,专门对其进行加密操作:

 public static String lock(int[] arr) {
        String result = "";
        //以下为加五操作以及对十取余操作
        for (int i = 0; i < arr.length; i++) {
            arr[i] += 5;
            arr[i] %= 10;
        }
        //以下为数组逆置操作
        for (int i = 0,j=arr.length-1; i < j; i++,j--) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        //以下为将数组重新拼接为字符串,在主函数中会将其转为整形!
        for (int i = 0; i < arr.length; i++) {
            result += arr[i];
        }
        return result;
    }

注意:此时result返回的是字符串类型,可以通过调用类方法:

Integer.parseInt();//可以将字符串转换为整形!

将字符串转换为整形还有许多方法,可以参考其他博主的博客!

完成以上步骤之后便完成了对数字的加密工作,那么如何将其进行解密呢?也是本案例中最为复杂的地方。

2.对数字的解密:

同样需要将传入的整形类型打包为数组类型方便操作,方法同上。而后就是要将刚刚的加密操作反过来操作,那么问题来了,对十取余的逆运算是什么呢?

在上课的时候也没有听说过还有对十取余的逆运算,那么如何解决呢?

其实对于这道题是比较简单的,可以通过找规律的方法!

依据规则,而且在数组当中,因为存的数据为原始数据的每一位数,所以不可能超过十,那么进行加五之后,取余之前的范围就为:

5,6,7,8,9,10,11,12,13,14(5~14)

用以上的数据取余之后便可得到以下:

5,6,7,8,9,0,1,2,3,4

由上面的规律便可知道,当其数据在(59)的范围内,对十取余之后不变,当数据在(1014)范围内时,数据只取各位的数字。于是你便可以定义如下的方法对其进行解码操作!

 public static String solve(int[] arr) {
        String result = "";
        //以下为对数据进行逆置操作
        for (int i = 0,j=arr.length-1; i < j; i++,j--) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        for (int i = 0; i < arr.length; i++) {
        //若在5~9范围内,则对其数据进行保留,然后进行减五操作,得到原数据。
            if(arr[i]>4 && arr[i]<10){
                arr[i] -= 5;
            }
        //若数据在0~4范围内(也就是取余之后范围在10~14的数据),
        //则对其先进行加十操作,然后再进行减五操作。
            else{
                arr[i] += 10;
                arr[i] -= 5;
            }
        }
        //最后对其进行拼接操作!
        for (int i = 0; i < arr.length; i++) {
            result += arr[i];
        }
        return result;
    }

完成以上操作便可以实现对数据的加密与解密啦!以下为完整代码!

package com.wxy.demo1;

import java.util.Scanner;

public class 数字加密 {
    static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
        int arr[] = new int[4];

        System.out.println("请输入四位数!");
        int result = sc.nextInt();
        //此处为检测是否输入的数据为四位数,否则就一直重试!
        while (result / 10000 != 0) {
            System.out.println("您的输入非法!请重新输入一个四位数数字!");
            result = sc.nextInt();
        }
        arr = pack(result);
        System.out.println("请选择你的模式");
        int i = 0;
        System.out.println("输入1为加密,输入2为解密");
        i = sc.nextInt();
        switch (i) {
            case 1 -> result = Integer.parseInt(lock(arr));
            case 2 -> result = Integer.parseInt(solve(arr));
        }
        System.out.println(result);
    }

    public static int[] pack(int result) {
        int arr[] = new int[4];
//        arr[0] = result / 1000 % 10;
//        arr[1] = result / 100 % 10;
//        arr[2] = result / 10 % 10;
//        arr[3] = result % 10;
        for (int i = 0; i < arr.length; i++) {
            arr[i] = result%10;
            result /= 10;
        }
        return arr;
    }

    public static String lock(int[] arr) {
        String result = "";
        for (int i = 0; i < arr.length; i++) {
            arr[i] += 5;
            arr[i] %= 10;
        }
        for (int i = 0,j=arr.length-1; i < j; i++,j--) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        for (int i = 0; i < arr.length; i++) {
            result += arr[i];
        }
        return result;
    }

    public static String solve(int[] arr) {
        String result = "";
        for (int i = 0,j=arr.length-1; i < j; i++,j--) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]>5 && arr[i]<10){
                arr[i] -= 5;
            }
            else{
                arr[i] += 10;
                arr[i] -= 5;
            }
        }//因为取余之后的范围为5,14.所以可以采用规律法。
        for (int i = 0; i < arr.length; i++) {
            result += arr[i];
        }
        return result;
    }
}
标签: 安全 web安全 java

本文转载自: https://blog.csdn.net/weixin_65237252/article/details/128505467
版权归原作者 沙糖桔45 所有, 如有侵权,请联系我们删除。

“Java小案例----数字密码的加密与解密”的评论:

还没有评论