用java实现4种加密解密算法(包括:换位加密解密、替换加密解密、位加密解密、一次一密)

    技术2022-07-12  65

    案例1: 换位加密解密算法

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class demo { static char[] jiami(char[] str, int n) //加密算法 { int i, j, k, d; int len; char[] temp, miwen, mtemp = {}; len = str.length; //字符串长度 if ((d = len % n) != 0) { len = len + n - d; } if ((temp = new char[len + 1]) == null) //申请内存 { System.out.print("申请内存失败!\n"); System.exit(1); } if ((miwen = new char[len + 1]) == null) //申请内存 { System.out.print("申请内存失败!\n"); System.exit(1); } else { mtemp = miwen; } System.arraycopy(str, 0, temp, 0, str.length); for (i = str.length; i < len; i++) { temp[i] = 32; } temp[len] = '\0'; i = 0; for (k = 0; k < n; k++) //转换,加密 { for (j = 0; j < len / n; j++) { mtemp[i] = temp[k + j * n]; i++; } } mtemp[i] = '\0'; temp = null; return miwen; //返回密文 } static char[] jiemi(char[] str, int n) //解密算法 { int i, j, k = 0, d; int len; char[] temp, mingwen, mtemp = {}; len = str.length; if ((d = len % n) != 0) { len = len - d; } n = len / n; if ((temp = new char[len + 1]) == null) //申请内存 { System.out.print("申请内存失败!\n"); System.exit(1); } if ((mingwen = new char[len + 1]) == null) //申请内存 { System.out.print("申请内存失败!\n"); System.exit(1); } else { mtemp = mingwen; } System.arraycopy(str, 0, temp, 0, str.length); for (i = str.length; i < len; i++) { temp[i] = 32; } temp[len] = '\0'; i = 0; for (k = 0; k < n; k++) //恢复出明文 { for (j = 0; j < len / n; j++) { mtemp[i] = temp[k + j * n]; i++; } } while (mtemp[--i] == 32) ; i++; mtemp[i] = '\0'; return mingwen; //返回明文 } public static void main(String[] args) throws IOException { int n, i; char[] srcstr = new char[100]; char[] miwen; String go; System.out.print("换位加密解密算法演示!\n"); do { System.out.print("\n请先输入换位加密矩阵每行的字符数:"); Scanner input = new Scanner(System.in); n = input.nextInt(); //输入换位加密矩阵每行的字符数 System.out.println("请输入明文:"); //输入明文字符串 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); String str = bufferedReader.readLine(); srcstr = str.toCharArray(); System.out.print("输入的明文为:"); for (i = 0; i < srcstr.length; i++) { System.out.print(srcstr[i]); } miwen = jiami(srcstr, n); //加密 System.out.print("\n加密后的密文为:"); for (i = 0; i < srcstr.length; i++) { System.out.print(miwen[i]); } miwen = jiemi(miwen, n); //解密 System.out.print("\n解密出的明文为:"); for (i = 0; i < srcstr.length; i++) { System.out.print(miwen[i]); } System.out.print("\n继续执行(y/n)?"); go = input.next(); } while (go.equalsIgnoreCase("y")); System.out.println("演示结束!"); } }

    案例2: 替换加密解密算法

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; public class demo { static char[] jiami(char[] str, int n) //加密算法 { int i, len; char[] miwen; len = str.length; if ((miwen = new char[len + 1]) == null) //申请内存 { System.out.print("申请内存失败!\n"); System.exit(1); } for (i = 0; i < len; i++) //移位替换 { miwen[i] = (char) (str[i] + n); } miwen[len] = '\0'; return miwen; } static char[] jiemi(char[] str, int n) //解密算法 { int i, len; char[] mingwen; len = str.length; if ((mingwen = new char[len + 1]) == null)//申请内存 { System.out.print("申请内存失败!\n"); System.exit(1); } for (i = 0; i < len; i++) //移位替换 { mingwen[i] = (char) (str[i] - n); } mingwen[len] = '\0'; return mingwen; } public static void main(String[] args) throws IOException { int i, n; char[] srcstr = new char[100]; char[] miwen; String go; System.out.print("替换加密解密算法演示!\n"); do { System.out.print("\n请先输入替换加密解密算法中的密钥:"); Scanner input = new Scanner(System.in); n = input.nextInt(); //密钥 System.out.print("请输入明文字符串:"); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); String str = bufferedReader.readLine(); srcstr = str.toCharArray(); //明文字符串 System.out.print("输入的明文为:"); for (i = 0; i < srcstr.length; i++) { System.out.print(srcstr[i]); } miwen = jiami(srcstr, n); //加密 System.out.print("\n加密后的密文为:"); for (i = 0; i < srcstr.length; i++) { System.out.print(miwen[i]); } miwen = jiemi(miwen, n); //解密 System.out.print("\n解密出的明文为:"); for (i = 0; i < srcstr.length; i++) { System.out.print(miwen[i]); } System.out.print("\n继续执行(y/n)?"); go = input.next(); } while (go.equalsIgnoreCase("y")); System.out.println("演示结束!"); } }

    执行结果如下:

    案例3:位加密解密算法

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; public class demo { static char[] bitcode(char[] str, char n) //位加密解密算法 { int i, len; char[] wen; len = str.length; if ((wen = new char[len + 1]) == null) { System.out.print("申请内存失败!\n"); System.exit(1); } for (i = 0; i < len; i++) { wen[i] = (char) (str[i] ^ n); //异或运算 } wen[len] = '\0'; return wen; } public static void main(String[] args) throws IOException { int i; char ch; char[] srcstr = new char[100]; char[] miwen; String go; System.out.print("位加密解密算法演示!\n"); do { System.out.print("\n请先输入替换加密解密算法中的密钥:"); Scanner input = new Scanner(System.in); ch = input.next().charAt(0); //密钥 System.out.print("请输入明文字符串:"); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); String str = bufferedReader.readLine(); srcstr = str.toCharArray(); //明文字符串 System.out.print("输入的明文为:"); for (i = 0; i < srcstr.length; i++) { System.out.print(srcstr[i]); } miwen = bitcode(srcstr, ch); //加密 System.out.print("\n加密后的密文为:"); for (i = 0; i < srcstr.length; i++) { System.out.print(miwen[i]); } miwen = bitcode(miwen, ch); //解密 System.out.print("\n解密出的明文为:"); for (i = 0; i < srcstr.length; i++) { System.out.print(miwen[i]); } System.out.print("\n继续执行(y/n)?"); go = input.next(); } while (go.equalsIgnoreCase("y")); System.out.println("演示结束!"); } }

    执行结果如下:

    案例4: 一次一密加密算法

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Random; import java.util.Scanner; public class demo { static int MAX = 100; static char[] key = new char[MAX]; //用于保存密钥 static int len; static char[] bitcode(char[] str) //一次一密加密算法 { int i; char[] wen; if ((wen = new char[len + 1]) == null) { System.out.printf("申请内存失败!\n"); System.exit(1); } for (i = 0; i < len; i++) { wen[i] = (char) (str[i] ^ key[i]); //异或运算 } wen[len] = '\0'; return wen; } public static void main(String[] args) throws IOException { int i; char[] srcstr = new char[MAX]; char[] miwen, mingwen; String go; Scanner input = new Scanner(System.in); // srand(time(NULL)); //随机种子 System.out.printf("一次一密加密解密算法演示!\n"); do { System.out.printf("请输入明文字符串:"); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); String str = bufferedReader.readLine(); srcstr = str.toCharArray(); //明文信息 Random r = new Random(); //随机种子 len = srcstr.length; for (i = 0; i < len; i++) { key[i] = (char) (r.nextInt(10) + '0'); //产生密钥序列 } System.out.printf("此次加密解密演示的密钥序列为:"); for (i = 0; i < len; i++) { System.out.printf("%c", key[i]); } // System.out.printf("\n"); miwen = bitcode(srcstr); //加密 System.out.printf("\n输入的明文为:"); for (i = 0; i < srcstr.length; i++) System.out.print(srcstr[i]); System.out.printf("\n加密后的密文为:"); for (i = 0; i < miwen.length; i++) System.out.print(miwen[i]); mingwen = bitcode(miwen); //解密 System.out.printf("\n解密出的明文为:"); for (i = 0; i < mingwen.length; i++) System.out.print(mingwen[i]); System.out.print("\n\n继续执行(y/n)?"); go = input.next(); } while (go.equalsIgnoreCase("y")); System.out.println("演示结束!"); } }

    执行结果如下:

    Processed: 0.012, SQL: 10