数字加密和解密

需求:

某系统的数字密码(大于0) 比如1983,采用加密方式进行传输

规则如下:

每位数加上5

再对10求余

最后将所有数字反转得到一串新数。

加密:

分析:

  1. 把整数里面的每一位放到数组中

  1. 加密

  1. 把数组里面的每一个数字进行拼接,变成加密之后的结果

代码实现:

import java.util.Scanner

        
public class Test6 {
    public static void main(String[] args) {
        //键盘录入密码
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入密码:");
        int number = sc.nextInt();


        //一.将数字转换到数组中

        int temp=number;//number初始值
        //1.获取数组长度count
        int count=0;
        while(number!=0){
            //每循环一次就去掉最右边的数字
            number=number/10;
            //循环一次计数器加一次
            count++;
        }

        //2.将数字存入数组中
            //动态分配(定义数组)
        int[] arr=new int[count];

        for (int i = (count-1); i >=0; i--) {
            arr[i]=temp%10;//将个位数字赋给数组
            temp=temp/10;//将个位数字删除
        }

        //二.数组中每项加五
        for (int i = 0; i < count; i++) {
            arr[i]+=5;
        }

        //三.每项对10求余
        for (int i = 0; i < count; i++) {
            arr[i]=arr[i]%10;
        }

        //四.将所有数字反转
        for (int i = 0,j=(count-1); i < j; i++,j--) {
            temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }

        //五.输出
        //直接遍历输出数组
        for (int i = 0; i < count; i++) {
            System.out.print(arr[i]);
        }

    }
}

结果实例:

难点:

第一步.将一个整数转入数组、

1.利用取余、取模获取和删除最右边的数字

2.定义一个变量作为计数器,删除数字的次数就是数字的位数即需要定义的数组长

解密:

分析:

如图所示,反转加密的过程。

难点:

由于加密是对10取余的方式进行获取的,因此解密的时候需要进行判断,0~4之间加10,5~9之间不变

代码实现:

import java.util.Scanner;

public class Test7 {
    public static void main(String[] args) {

        //键盘录入加密后的密码
        Scanner sc=new Scanner(System.in);
        int number=sc.nextInt();
        int temp=number;

        //一.先将数字转入数组中
        //1.获取数组长度
        int count=0;
        while(number!=0){
            //每循环一次就去除一个最右边的数字
            number=number/10;
            //每循环一次,计数器加一
            count++;
        }
        //2.定义数组
        int[] arr=new int[count];
            //
        for (int i = (count-1); i >=0 ; i--) {
            arr[i]=temp%10;//将个位数字赋给数组
            temp=temp/10;//将个位数字删除

        }

        //二.反转
        for (int i = 0,j=(count-1); i < j ; i++,j--) {
            temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }

        //三.由于加密是对10取余的方式进行获取的,因此解密的时候需要进行判断,0~4之间加10,5~9之间不变
        for (int i = 0; i < count; i++) {
            if(arr[i]>=0&&arr[i]<=4){
                arr[i]+=10;
            }
        }

        //四.每位减5
        for (int i = 0; i < count; i++) {
            arr[i]-=5;
        }

        //五.输出
        for (int i = 0; i < count; i++) {
            System.out.print(arr[i]);
        }
    }
}

结果实例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值