java实现仿射密码加密解密
作者:降妖问问你敢不敢 发布时间:2022-10-09 04:04:49
标签:java,密码,加密解密
本文实例为大家分享了java实现仿射密码加密解密的具体代码,供大家参考,具体内容如下
加密:将明文转化为对应的数字,如 ‘a'-> 0, ‘b'->1,…,'1'->26,'2'->27,…然后将数字进行仿射运算,求取出来的数字再转化为字符。即 密文=(K1*明文+K2)mod36
解密:密文转化为对应数字,然后进行仿射的逆运算,得到对应数字,然后将其转化为字符明文。解密 K3是K1的乘法逆元
import java.util.Scanner;
public class Affine{
public static void main(String[] args) {
char[] form = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0'
, '1', '2', '3', '4', '5', '6', '7', '8', '9'};
Scanner sc = new Scanner(System.in);
System.out.println("请输入待加密的明文:");
String MingWen = sc.nextLine();
MingWen=MingWen.toUpperCase();//将输入的明文全部大写
final int K1 = 103;
final int K2 = 103;
final int K3 = 31;
int [] cipherNum=new int[MingWen.length()];//用来存储数字化的密文
encryption(MingWen,form,K1,K2,cipherNum);
decryption(form,MingWen,K2,K3,cipherNum);
}
public static void encryption(String MingWen,char[] form,int K1,int K2,int[] cipherNum){
//第一步:将明文存入数组
char[] pla=new char[MingWen.length()];
for (int i = 0; i <MingWen.length() ; i++) {
pla[i]=MingWen.charAt(i);
}//已将明文存入字符数组pla中
//第二步:通过脚标找到明文中每个字符对应的数,参与加密运算
int[] MingWenNumber=new int[pla.length];
for (int i = 0; i <pla.length ; i++) {
for (int j = 0; j <form.length ; j++) {
if (form[j]==pla[i]) {
MingWenNumber[i] = j;
}
}
}
//通过脚标将明文全部转化为数字
char[] cipher = new char[MingWen.length()];//cipher密码数组 用来存储密文
for (int i = 0; i <MingWen.length() ; i++) {
int a= Math.floorMod((K1*MingWenNumber[i]+K2),36);
cipherNum[i]=a;
cipher[i]=form[a];
//计算密文并存入数组中
}
System.out.println("加密结果是:");
System.out.println(cipher);
}
public static void decryption(char[] form,String Mingwen,int K2,int K3,int[] cipherNum){
char[] JieMI=new char[Mingwen.length()];
for (int i =0;i<Mingwen.length();i++){
JieMI[i]=form[Math.floorMod(K3*(cipherNum[i]-K2),36)];
}
System.out.println("解密结果是:");
System.out.println(JieMI);
}
}
来源:https://blog.csdn.net/rtx_2080/article/details/86523035


猜你喜欢
- 本文实例为大家分享了java实现猜拳游戏的具体代码,供大家参考,具体内容如下package com.farsight.session7;im
- 前端采用layui框架,讲解多文件上传的完整实现功能。前端html重点代码如下:<div class="layui-form
- 一、介绍JUnit是一款优秀的开源Java单元测试框架,也是目前使用率最高最流行的测试框架,开发工具Eclipse和IDEA对JUnit都有
- 本文实例为大家分享了Struts2+uploadify多文件上传的具体代码,供大家参考,具体内容如下首先我这里使用的是 Jque
- 目录 Dubbo是什么?Dubbo能做什么?介绍Api模块实现producer模块实现consumer模块实现 Dubb
- 1、AOP基本总结连接点(JoinPoint):连接点是程序运行的某个阶段点,如方法调用、异常抛出等切入点(Pointcut):切入点是Jo
- 回调在 * 中定义为:在计算机程序设计中,回调函数,是指通过函数参数传递到其他代码的,某一块可执行代码的引用。其目的是允许底层代码调用在高
- 我们从书本上学到什么?最明显的,也是直观的方式,在Java中生成随机数只要简单的调用:java.lang.Math.random()在所有其
- 本文实例讲述了Java实现数据库连接池的方法。分享给大家供大家参考。具体如下:package com.kyo.connection;impo
- 什么是SpringSpring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。 &nbs
- 先说下这个demo,这是一个模仿课程表的布局文件,虽然我是个菜鸟,但我还是想留给学习的人一些例子,先看下效果 然后再来看一下我们学
- 目录获取程序下面的文件获取临时目录下的文件获取程序下面的文件首先我们创建了实例解决方案:其中调用链是:Main.Shell->FooA
- 主要介绍springboot项目中配置文件的加密前言为了保证服务器相关信息的保密,一般会采用加密的方式进行对配置文件原文的加密,今天介绍下s
- java实现数字转大写的方法说明:将数字金额转大写,如下:public class Test { /** *
- 1.导入pom依赖<!-- mybatis-->  
- 本文以案例形式分析了Android中TelephonyManager类的用法。分享给大家供大家参考。具体如下:目录结构:main.xml布局
- name和value属性的区别从源码可以得知,name是value的别名,value也是name的别名。两者的作用是一致的,name指定Fe
- 今天跟大家分享一个利用外部Jar包来实现Java操作CSV文件一.资源下载1.直接下载Jar包:javacsv-2.0.jar2.利用Mav
- Java 获取文件大小今天写代码时需要实现获取文件大小的功能,目前有两种实现方法,一种是使用File的length()方法;另外
- 前言中国象棋是起源于中国的一种棋,属于二人对抗 * 的一种,在中国有着悠久的历史。由于用具简单,趣味性强,成为流行极为广泛的棋艺活动。中国象