基于java的enigma的加密程序
来源:互联网 发布:索恩马克体测数据 编辑:程序博客网 时间:2024/05/22 04:58
import java.util.*;
public class enigma {
static public void main(String[] arg){
String P;
String M;//明文
int key1,key2,key3 = 0;
Scanner in=new Scanner(System.in); //使用Scanner类定义对象
System.out.println("请输入明文:");
P=in.nextLine();
System.out.println("请输入密钥" +"\n"+"请输入第一个密码轮的初始位置:");
key1=in.nextInt();
System.out.println("请输入第二个密码轮的初始位置:");
key2=in.nextInt();
System.out.println("请输入第三个密码轮的初始位置:");
key3=in.nextInt();
P=P.toUpperCase();// 将明文转换成大写
P=P.replaceAll("[^A-Z]", "");//去除所有非字母的字符
Encrypt en = new Encrypt();
Decrypt dec=new Decrypt();
M=en.encrypt(key1, key2, key3, P);
dec.decrypt(key1, key2, key3, M);
}
}
class Encrypt{
String encrypt(int key1,int key2,int key3,String str){
String m="";
char[] chara={'A','B','C','D','E','F','G','H','I','J'};
int[] list={1,2,3,4,5,6,7,8,9,10};
int[] firstCycle={3,8,7,5,2,9,1,10,6,4};
int[] secondCycle={8,6,2,5,4,7,3,9,1,10};
int[] thirdCycle={4,7,8,2,3,1,10,6,5,9};
int counter1=10,counter2=10,counter3=10,i,j,k1,k2,k3;
for(i=0;i<str.length();i++){
for(j=0;j<10;j++){
if(str.charAt(i)==chara[j])
break;
}
if((counter1+j-key1)<0)
j=10+j+counter1-key1;
else
j=j+counter1-key1;
for(k1=0;k1<10;k1++){
if(list[(j)%10]==firstCycle[k1])
break;
}
k1=10-counter1+k1;
if((counter2+k1-key2)<0)
k1=10+counter2+k1-key2;
else
k1=counter2+k1-key2;
for(k2=0;k2<10;k2++){
if(list[(k1)%10]==secondCycle[k2])
break;
}
k2=10-counter2+k2;
if((counter3+k2-key3)<0)
k2=10+counter3+k2-key3;
else
k2=counter3+k2-key3;
for(k3=0;k3<10;k3++){
if(list[(k2)%10]==thirdCycle[k3]){
break;
}
}
m+=chara[(k3+key3+10-counter3)%10];
counter3--;
if(counter3==0)
{
counter3=10;
counter2--;
if(counter2==0){
counter2=10;
counter1--;
if(counter1==0)
counter1=10;
}
}
}
System.out.println("密文是:"+m);
return m;
}
}
class Decrypt{
void decrypt(int key1,int key2,int key3,String str){
String m="";
char[] chara={'A','B','C','D','E','F','G','H','I','J'};
int[] list={1,2,3,4,5,6,7,8,9,10};
int[] firstCycle={3,8,7,5,2,9,1,10,6,4};
int[] secondCycle={8,6,2,5,4,7,3,9,1,10};
int[] thirdCycle={4,7,8,2,3,1,10,6,5,9};
int counter1=10,counter2=10,counter3=10,i,j,k1,k2,k3;
for(i=0;i<str.length();i++){
for(j=0;j<10;j++){
if(str.charAt(i)==chara[j])
break;
}
if((counter3+j-key3)<0)
j=10+j+counter3-key3;
else
j=j+counter3-key3;
for(k1=0;k1<10;k1++){
if(thirdCycle[(j)%10]==list[k1])
break;
}
k1=10-counter3+k1;
k1=counter2+k1+key3;
for(k2=0;k2<10;k2++){
if(secondCycle[(k1)%10]==list[k2])
break;
}
k2=10-counter2+k2;
k2=counter1+k2+key2;
for(k3=0;k3<10;k3++){
if(firstCycle[(k2)%10]==list[k3]){
break;
}
}
m+=chara[(k3+key1+10-counter1)%10];
counter3--;
if(counter3==0)
{
counter3=10;
counter2--;
if(counter2==0){
counter2=10;
counter1--;
if(counter1==0)
counter1=10;
}
}
}
System.out.println("明文是:"+m);
}
}
public class enigma {
static public void main(String[] arg){
String P;
String M;//明文
int key1,key2,key3 = 0;
Scanner in=new Scanner(System.in); //使用Scanner类定义对象
System.out.println("请输入明文:");
P=in.nextLine();
System.out.println("请输入密钥" +"\n"+"请输入第一个密码轮的初始位置:");
key1=in.nextInt();
System.out.println("请输入第二个密码轮的初始位置:");
key2=in.nextInt();
System.out.println("请输入第三个密码轮的初始位置:");
key3=in.nextInt();
P=P.toUpperCase();// 将明文转换成大写
P=P.replaceAll("[^A-Z]", "");//去除所有非字母的字符
Encrypt en = new Encrypt();
Decrypt dec=new Decrypt();
M=en.encrypt(key1, key2, key3, P);
dec.decrypt(key1, key2, key3, M);
}
}
class Encrypt{
String encrypt(int key1,int key2,int key3,String str){
String m="";
char[] chara={'A','B','C','D','E','F','G','H','I','J'};
int[] list={1,2,3,4,5,6,7,8,9,10};
int[] firstCycle={3,8,7,5,2,9,1,10,6,4};
int[] secondCycle={8,6,2,5,4,7,3,9,1,10};
int[] thirdCycle={4,7,8,2,3,1,10,6,5,9};
int counter1=10,counter2=10,counter3=10,i,j,k1,k2,k3;
for(i=0;i<str.length();i++){
for(j=0;j<10;j++){
if(str.charAt(i)==chara[j])
break;
}
if((counter1+j-key1)<0)
j=10+j+counter1-key1;
else
j=j+counter1-key1;
for(k1=0;k1<10;k1++){
if(list[(j)%10]==firstCycle[k1])
break;
}
k1=10-counter1+k1;
if((counter2+k1-key2)<0)
k1=10+counter2+k1-key2;
else
k1=counter2+k1-key2;
for(k2=0;k2<10;k2++){
if(list[(k1)%10]==secondCycle[k2])
break;
}
k2=10-counter2+k2;
if((counter3+k2-key3)<0)
k2=10+counter3+k2-key3;
else
k2=counter3+k2-key3;
for(k3=0;k3<10;k3++){
if(list[(k2)%10]==thirdCycle[k3]){
break;
}
}
m+=chara[(k3+key3+10-counter3)%10];
counter3--;
if(counter3==0)
{
counter3=10;
counter2--;
if(counter2==0){
counter2=10;
counter1--;
if(counter1==0)
counter1=10;
}
}
}
System.out.println("密文是:"+m);
return m;
}
}
class Decrypt{
void decrypt(int key1,int key2,int key3,String str){
String m="";
char[] chara={'A','B','C','D','E','F','G','H','I','J'};
int[] list={1,2,3,4,5,6,7,8,9,10};
int[] firstCycle={3,8,7,5,2,9,1,10,6,4};
int[] secondCycle={8,6,2,5,4,7,3,9,1,10};
int[] thirdCycle={4,7,8,2,3,1,10,6,5,9};
int counter1=10,counter2=10,counter3=10,i,j,k1,k2,k3;
for(i=0;i<str.length();i++){
for(j=0;j<10;j++){
if(str.charAt(i)==chara[j])
break;
}
if((counter3+j-key3)<0)
j=10+j+counter3-key3;
else
j=j+counter3-key3;
for(k1=0;k1<10;k1++){
if(thirdCycle[(j)%10]==list[k1])
break;
}
k1=10-counter3+k1;
k1=counter2+k1+key3;
for(k2=0;k2<10;k2++){
if(secondCycle[(k1)%10]==list[k2])
break;
}
k2=10-counter2+k2;
k2=counter1+k2+key2;
for(k3=0;k3<10;k3++){
if(firstCycle[(k2)%10]==list[k3]){
break;
}
}
m+=chara[(k3+key1+10-counter1)%10];
counter3--;
if(counter3==0)
{
counter3=10;
counter2--;
if(counter2==0){
counter2=10;
counter1--;
if(counter1==0)
counter1=10;
}
}
}
System.out.println("明文是:"+m);
}
}
阅读全文
0 0
- 基于java的enigma的加密程序
- Enigma机密码加密解密的实现
- 基于XOR的加密程序
- (转载)ENIGMA的兴亡
- 基于DES加密的java socket程序(客户端)
- 基于DES加密的java Socket 程序(服务器端)
- 基于DES加密的TCP聊天程序
- Java程序的加密和反加密
- Java程序的加密和反加密
- Java程序的加密和反加密
- Java程序的加密和反加密
- Java程序的加密和反加密
- Java程序的加密和反加密
- Java的DES加密程序
- ENIGMA加密机
- Java基于AES的加密与解密
- 基于DES加密的Java socket程序(加解密算、算法)
- 基于msp430的单片机的DES加密程序
- Binary Search:475. Heaters
- 表单验证
- unity常见面试题
- ubuntu16.04安裝Django
- Leetcode oj1 第一题 two sum
- 基于java的enigma的加密程序
- 构建高性能的ASP.NET应用(10)
- java.util.concurrent中的Condition与wait/notify区别
- UnityDrawCall优化
- 美团技术团队:实例详解机器学习如何解决问题(转载)
- Next Permutation--LeetCode
- TabLayout,ViewPager,Fragment,实现联动
- zuul动态配置路由规则,从DB读取
- struts2下kindeditor编辑器使用