Java实现数字的加密与解密功能—Day03
实现思路
利用面向对象的知识,用两个类来进行功能的实现
- 数字加密
-
定义一个方法来获取输入的密码的每一位数字,将获取到的数字存储到一个数组中
-
定义一个方法将数组中的每一位数都+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;
}
}
运行展示:
加密
解密