📄 code.java
字号:
FileOutputStream out = new FileOutputStream(f);
out.write(textPane.getText().getBytes());
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
}
class Opening
{
public Opening()
{
int i = filechooser.showOpenDialog(Code.this);
if (i == JFileChooser.APPROVE_OPTION)
{
File f = filechooser.getSelectedFile();
try
{
InputStream is = new FileInputStream(f);
textPane.read(is, "d");
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
}
class ComplierAction extends AbstractAction
{
public ComplierAction()
{
super("哈夫曼加密");
}
public void printlist(LinkedList list)
{
int k=list.size();
int i;
for(i=0;i<k;i++)
{
Node temp=(Node)list.get(i);
System.out.print(temp.info);
System.out.print(temp.code);
System.out.print("\n");
}
}
public int checkexist(char a,LinkedList list)
{
int k=list.size();
int i;
for(i=0;i<k;i++)
{
Type temp=(Type)list.get(i);
if(temp.data==a)
return i;
}
return -1;
}
public void check(char a,LinkedList list1,LinkedList list2)
{
Type te=new Type(a);
TTree t=new TTree(a);
int i=checkexist(a,list1);
if(i==-1)
{list1.add(te);list2.add(t);}
else
{
t=(TTree)list2.get(i);
t.addcount();
list2.set(i,t);
}
}
public void printstack(Tstack s,LinkedList list)
{
Node node=new Node();
Tstack temp=new Tstack();
while(!s.empty())
if(s.gettop()!=null)
temp.push(s.pop());
while(!temp.empty())
{
if(temp.gettop().flag!='2')
{
node.code=node.code+temp.gettop().flag;
node.info=temp.gettop().info;
}
if(temp.gettop()!=null)
s.push(temp.pop());
}
list.add(node);
}
public TTree create(LinkedList list)
{
TTree s=new TTree();
LinkedList temp=list;
TTree min1,min2,mid,t1;
char m='$';
int i=0,j=0,k=1,len=list.size();
while(temp.size()!=1)
{
min1=(TTree)temp.get(0);
min2=(TTree)temp.get(1);
j=0;k=1;
for(i=2;i<len;i++)
{
mid=(TTree)temp.get(i);
if(mid.count<min1.count)
{min1=mid;j=i;}
else
if(mid.count<min2.count)
{min2=mid;k=i;}
}
t1=new TTree(m,min1,min2);
min1.parent=t1;
min2.parent=t1;
if(j>k)
{
temp.remove(j);
temp.remove(k);
}
else
{
temp.remove(k);
temp.remove(j);
}
temp.add(t1);
len=temp.size();
}
s=(TTree)temp.get(0);
TT=s;
return s;
}
public void Allpath(TTree T,Tstack s,LinkedList list)
{
if(T!=null)
{
s.push(T);
if(T.lchild==null&&T.rchild==null)
printstack(s,list);
else
{
Allpath(T.lchild,s,list);
Allpath(T.rchild,s,list);
}
if(!s.empty())
s.pop();
}
}
public String convert(char a)
{
int k=list3.size();
int i=0;
Node temp=new Node();
for(i=0;i<k;i++)
{
temp=(Node)list3.get(i);
if(temp.info==a)
{break; }
}
return temp.code;
}
public void actionPerformed(ActionEvent e)
{
int i=0;
char t[]=textPane.getText().toCharArray();
LinkedList list1=new LinkedList();
LinkedList list2=new LinkedList();
list3=new LinkedList();
String co=new String();
TTree T;
try
{
for(;i<textPane.getText().length();i++)
check(t[i],list1,list2);
T=create(list2);
Tstack s=new Tstack();
Allpath(T,s,list3);
for(i=0;i<textPane.getText().length();i++)
co=co+convert(t[i]);
textPane.setText(co);
new Warning("提示","保存HUFFMAN钥匙");
///////////save///////////////////////
i = filechooser.showSaveDialog(Code.this);
if (i == JFileChooser.APPROVE_OPTION)
{
File f = filechooser.getSelectedFile();
try{
String en=new String();
en=en+(char)(13);
RandomAccessFile out=new RandomAccessFile(f,"rw");
if(f.exists())
{
long length=f.length();
out.seek(length);
}
int k=list3.size();
int j=0;
Node temp=new Node();
for(j=0;j<k;j++)
{
temp=(Node)list3.get(j);
out.writeBytes(temp.info+temp.code);
out.writeBytes(en);
}
out.close();
}
catch(Exception E)
{
System.out.println("error!");
}
}
new Warning("提示","保存密文");
new Saveing();
}
catch(Exception E)
{
new Warning("加密错误","加密出错");
}
}
}
class ConvertAction extends AbstractAction
{
public ConvertAction()
{
super("哈夫曼解密");
}
void openco()
{
int i = filechooser.showSaveDialog(Code.this);
if (i == JFileChooser.APPROVE_OPTION)
{
try{
String s=new String();
Node temp;
list3=new LinkedList();
char[] ctemp;
File f = filechooser.getSelectedFile();
FileReader in=new FileReader(f);
BufferedReader bufferIn=new BufferedReader(in);
while((s=bufferIn.readLine())!=null)
{
ctemp=s.toCharArray();
temp=new Node(ctemp[0]);
for(i=1;i<s.length();i++)
{
temp.addcode(ctemp[i]);
}
list3.add(temp);
}
bufferIn.close();
in.close();
}
catch(Exception E)
{
new Warning("警告","解密异常");
}
}
else
new Warning("警告","解密异常");
}
public void actionPerformed(ActionEvent e)
{
new Warning("提示","打开密文");
new Opening();
new Warning("提示","打HUFFMAN密钥");
openco();
int i=0,j=0,k=0;
char s[]=textPane.getText().toCharArray();
Node temp=new Node();
String m=new String();
try
{
for(i=0;i<textPane.getText().length();i++)
{
for(j=0;j<list3.size();j++)
{
temp=(Node)list3.get(j);
char t[]=temp.code.toCharArray();
for(k=0;k<temp.code.length();k++)
{
if(t[k]!=s[i+k])
break;
}
if(k==temp.code.length())
break;
}
m=m+temp.info;
i=i+k-1;
}
textPane.setText(m);
new Warning("保存提示","如果需要请保存");
new Saveing();
}
catch(Exception E)
{
new Warning("反编译出错","未找到编译密钥");
}
}
}
class PrintAction extends AbstractAction
{
public PrintAction()
{
super("打印哈夫曼树");
}
public void actionPerformed(ActionEvent e)
{
try
{
if(TT.lchild==null&&TT.rchild==null)
new Warning("提示","尚未哈夫曼编码");
else
new windowcan(TT);
}
catch(Exception E)
{
new Warning("错误","打印出错");
}
}
}
class RsasetcodeAction extends AbstractAction
{
int num1,num2,num3,num4;
public RsasetcodeAction()
{
super("获得公钥私钥");
}
boolean check(int num1,int num2)
{
int i;
for(i=2;i<=num1&&i<=num2;i++)
if(num1%i==0&&num2%i==0)
return false;
return true;
}
void Findnum(int e)
{
int i,j,s;
Random random = new Random();
j=Math.abs((random.nextInt()% e))+e;
for(i=2;i<=Math.sqrt(j);i++)
{
if(j%i==0||j<15)
{
j=Math.abs((int)(random.nextInt()%e))+e;
i=1;
}
}
num1=j;
j=Math.abs((int)(random.nextInt()% e))+e;
for(i=2;i<=Math.sqrt(j);i++)
{
if(j%i==0||j==num1||j<15)
{
j=Math.abs((int)(random.nextInt()% e))+e;
i=1;
}
}
num2=j;
s=(num1-1)*(num2-1);
for(i=s/10;i<s;i++)
if(check(i,s))
{
num3=i;
break;
}
for(j=2;;j++)
if(j*(num3)%s==1&&num3!=j)
{
num4=j;
break;
}
}
public void actionPerformed(ActionEvent e)
{
subwin=new JDialog();
subwin.setTitle("设置加密等级");
subwin.setModal(true);
subwin.setBounds(320,150,300,120);
text1=new JTextField(8);
subwin.add(new JLabel("设置加密等级数字大于20小于1000"));
subwin.add(text1);
subwin.add(button1);
subwin.add(button2);
FlowLayout flow=new FlowLayout();
subwin.setLayout(flow);
subwin.setVisible(true);
subwin.validate();
if(rsasetflag)
{ do
{
Findnum(x);
}while(num1*num2<(x-10)*(x-10));
rsasetflag=false;
subwin=new JDialog();
subwin.setTitle("生成公钥私钥");
subwin.setModal(true);
subwin.setBounds(320,150,180,120);
subwin.add(new JLabel("公钥N="+String.valueOf(num1*num2)));
subwin.add(new JLabel("公钥E="+String.valueOf(num4)));
subwin.add(new JLabel("私钥N="+String.valueOf(num1*num2)));
subwin.add(new JLabel("私钥D="+String.valueOf(num3)));
button2.setText("确定");
subwin.add(button2);
flow=new FlowLayout();
subwin.setLayout(flow);
subwin.setVisible(true);
subwin.validate();
}
}
}
class RsasetAction extends AbstractAction
{
public RsasetAction()
{
super("非对称加密");
}
void Clear()
{
for(int i=0;i<10000;i++)
s[i]=0;
}
void Mul(int s[],int m[],int n[])
{
int i,j,k,t,p;
for(i=1;i<=n[0];i++)
for(j=1;j<=m[0];j++)
{
k=i+j;
t=(s[k-1]+m[j]*n[i])/10;
s[k-1]=(s[k-1]+m[j]*n[i])%10;
while(t!=0)
{
p=(t+s[k])/10;
s[k]=(t+s[k])%10;
t=p;
k++;
}
}
i=10000-1;
while(s[i]==0)
{
--i;
}
s[0]=i;
}
void Sublev(int m[],int n[])
{
int i;
for(i=1;i<10000-1;i++)
{
if(m[i]<n[i])
{m[i]=m[i]+10;--m[i+1];}
m[i]=m[i]-n[i];
}
i=10000-1;
while(m[i]==0)
{
--i;
}
m[0]=i;
}
void Add(int m[],int n[])
{
int i,t,j;
for(i=1;i<10000;i++)
{
m[i]=m[i]+n[i];
t=m[i]/10;
m[i]=m[i]%10;
j=i;
while(t!=0)
{
m[j+1]=m[j+1]+t;
t=m[j+1]/10;
m[j+1]=m[j+1]%10;
j++;
}
}
i=10000-1;
while(m[i]==0)
{
--i;
}
m[0]=i;
}
void Exp(int s[],int m[],int n[])
{
int temp=0;
int i,j;
int t[];
t=new int[10000];
for(i=0;i<10000;i++)
t[i]=m[i];
for(i=n[0];i>0;--i)
temp=temp*10+n[i];
for(i=1;i<temp;i++)
{
Mul(s,t,m);
for(j=0;j<10000;j++)
{t[j]=s[j];s[j]=0;}
}
for(j=0;j<10000;j++)
s[j]=t[j];
}
void Divlev(int m[],int n[])
{
int s[],t[];
s=new int[10000];
t=new int[10000];
int temp=1;
rsa temp1=new rsa("10");
rsa temp2=new rsa(String.valueOf(m[0]-n[0]));
Exp(s,temp1.Ddata,temp2.Ddata);
Mul(t,s,n);
do
{
Sublev(m,t);
if(m[10000-1]==-1)
{
Add(m,t);
if(t[0]==n[0])
{break;}
else
{
for(int i=1;i<t[0];i++)
t[i]=t[i+1];
t[t[0]]=0;
t[0]-=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -