RSA 公钥算法Java代码带界面.docx
- 文档编号:11337885
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:20
- 大小:17.72KB
RSA 公钥算法Java代码带界面.docx
《RSA 公钥算法Java代码带界面.docx》由会员分享,可在线阅读,更多相关《RSA 公钥算法Java代码带界面.docx(20页珍藏版)》请在冰豆网上搜索。
RSA公钥算法Java代码带界面
RSA公钥加密算法代码
package.rsa.service;
publicclassUnPrimeExceptionextendsException{
publicUnPrimeException(){
}
publicUnPrimeException(Stringmessage){
super(message);
}
publicUnPrimeException(Throwablecause){
super(cause);
}
publicUnPrimeException(Stringmessage,Throwablecause){
super(message,cause);
}
}
------------------------------------------------------------------------------------------------
package.rsa.service;
publicinterfaceDataInfo{
publicMyDatasendData(longp,longq,longpublic_key,longdeprime)throwsUnPrimeException;
}
--------------------------------------------------------------------------------------------------
package.rsa.service;
publicclassDataDealimplementsDataInfo{
@Override
publicMyDatasendData(longp,longq,longpublic_key,longdeprime)
throwsUnPrimeException{
MyDatadata;
if(!
this.primeNumber(q)||!
this.primeNumber(q)){
thrownewUnPrimeException("非素数,请重新输入!
");
}elseif((deprime>=this.getF(p,q))||
(this.gcd(this.getF(p,q),deprime)!
=1)){
thrownewUnPrimeException("输入的公钥不符合条件!
");
}else{
data=newMyData(p,q,public_key,deprime);
}
returndata;
}
//判断是否为素数
publicbooleanprimeNumber(longt){
longk=0;
k=(long)Math.sqrt((double)t);
booleanflag=true;
outer:
for(inti=2;i<=k;i++){
if((t%i)==0){
flag=false;
breakouter;
}
}
returnflag;
}
privatelonggcd(longa,longb){//最大公约数
longgcd;
if(b==0)gcd=a;
elsegcd=gcd(b,a%b);
returngcd;
}
privatelonggetF(longp,longq){
return(p-1)*(q-1);
}
}
---------------------------------------------------------------------------------------------------------
package.rsa.service;
publicclassMyData{
privatelongp;
privatelongq;
privatelongpublic_key;
privatelongdeprime;
publicMyData(){
super();
}
publicMyData(longp,longq,longpublic_key,longdeprime){
super();
this.p=p;
this.q=q;
this.public_key=public_key;
this.deprime=deprime;
}
publiclonggetP(){
returnp;
}
publicvoidsetP(longp){
this.p=p;
}
publiclonggetQ(){
returnq;
}
publicvoidsetQ(longq){
this.q=q;
}
publiclonggetDeprime(){
returndeprime;
}
publicvoidsetDeprime(longdeprime){
this.deprime=deprime;
}
publiclonggetPublic_key(){
returnpublic_key;
}
publicvoidsetPublic_key(longpublic_key){
this.public_key=public_key;
}
publicbooleantoPrime(){//判断最大公约数是否为1
if(this.gcd(p,q)!
=1)
returnfalse;
returntrue;
}
//求最大公约数
publiclonggcd(longa,longb){
longgcd;
if(b==0)gcd=a;
elsegcd=gcd(b,a%b);
returngcd;
}
publiclonggetN(){
returnp*q;
}
publiclonggetF(){
return(p-1)*(q-1);
}
publiclongcolum(longy,longn,longkey){//加密/解密
longmul;
if(key==1)mul=y%n;
elsemul=y*this.colum(y,n,key-1)%n;
returnmul;
}
//计算得到密匙
publiclonggetPrivate_key(){
longf=this.getF();
longprivate_key=1;
longvalue=1;
for(longi=1;;i++){
value=i*f+1;
if((value%this.public_key==0)&&(value/this.public_key private_key=value/this.public_key; break; } } returnprivate_key; } //得到密文 publiclonggetMyPrime(){ returnthis.colum(this.deprime,this.getN(),this.public_key); } publicStringgetStrPrime(){ returnLong.toString(this.getMyPrime()); } //得到解密的文件 publiclonggetMyDeprime(){ returnthis.colum(this.getMyPrime(),this.getN(),this.getPrivate_key()); } publicStringgetStrDeprime(){ returnLong.toString(this.getMyDeprime()); } } --------------------------------------------------------------------------------------------------------- package.rsa.frame; importjava.awt.BorderLayout; importjava.awt.Component; importjava.awt.FlowLayout; importjava.awt.GridLayout; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; importjava.awt.event.WindowAdapter; importjava.awt.event.WindowEvent; importjavax.swing.JButton; importjavax.swing.JFrame; importjavax.swing.JLabel; importjavax.swing.JOptionPane; importjavax.swing.JPanel; importjavax.swing.JPasswordField; importjavax.swing.JTextField; importjavax.swing.border.EmptyBorder; publicclassSenderFrameextendsJFrame{ /** * */ privatestaticfinallongserialVersionUID=1L; publicSenderFrame(){ init(); } publicvoidinit(){ setTitle("Sender"); setSize(300,220); setContentPane(createContentPane()); addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEvente){ client.exit(SenderFrame.this); } }); } privateJPanelcreateContentPane(){ JPanelp=newJPanel(newBorderLayout()); p.add(BorderLayout.NORTH, newJLabel("发送数据",JLabel.CENTER)); p.add(BorderLayout.CENTER,createCenterPane()); p.add(BorderLayout.SOUTH,createBtnPane()); p.setBorder(newEmptyBorder(6,6,6,6)); returnp; } privateJPanelcreateCenterPane(){ JPanelp=newJPanel(newBorderLayout()); p.add(BorderLayout.NORTH,createIdPwdPane()); p.setBorder(newEmptyBorder(6,6,6,6)); returnp; } privateJPanelcreateIdPwdPane(){ JPanelp=newJPanel(newGridLayout(2,2,0,6)); p.add(createP()); p.add(createQ()); p.add(createPublic_key()); p.add(createPrime()); returnp; } privateJPanelcreateP(){ JPanelp=newJPanel(newBorderLayout(5,0)); p.add(BorderLayout.WEST,newJLabel("素数p: ")); idP=newJPasswordField(); idP.enableInputMethods(true); p.add(BorderLayout.CENTER,idP); returnp; } privateJPanelcreateQ(){ JPanelp=newJPanel(newBorderLayout(5,0)); p.add(BorderLayout.WEST,newJLabel("素数q: ")); idQ=newJPasswordField(); idQ.enableInputMethods(true); p.add(BorderLayout.CENTER,idQ); returnp; } privateJPanelcreatePublic_key(){ JPanelp=newJPanel(newBorderLayout(5,0)); p.add(BorderLayout.WEST,newJLabel("公钥: ")); public_key=newJTextField(); p.add(BorderLayout.CENTER,public_key); returnp; } privateJPanelcreatePrime(){ JPanelp=newJPanel(newBorderLayout(5,0)); p.add(BorderLayout.WEST,newJLabel("明文: ")); prime=newJTextField(); p.add(BorderLayout.CENTER,prime); returnp; } privateJPanelcreateBtnPane(){ JPanelp=newJPanel(newFlowLayout()); JButtonlogin=newJButton("发送"); JButtoncancel=newJButton("取消"); p.add(login); p.add(cancel); getRootPane().setDefaultButton(login); login.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ client.send(); } }); cancel.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ client.exit(SenderFrame.this); } }); returnp; } privateClientclient; publicvoidsetClient(Clientclient){ this.client=client; } privateJTextFieldpublic_key; privateJTextFieldprime; privateJPasswordFieldidP; privateJPasswordFieldidQ; publiclonggetP(){ char[]str=idP.getPassword(); Strings=newString(str); returnInteger.parseInt(s); } publiclonggetQ(){ char[]q=idQ.getPassword(); Strings=newString(q); returnInteger.parseInt(s); } publiclonggetPrime(){ Stringstr=prime.getText(); returnInteger.parseInt(str); } publiclonggetPublic_key(){ Stringstr=public_key.getText(); returnInteger.parseInt(str); } } ----------------------------------------------------------------------------------------------------------- package.rsa.frame; importjava.awt.BorderLayout; importjava.awt.FlowLayout; importjava.awt.GridLayout; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; importjava.awt.event.WindowAdapter; importjava.awt.event.WindowEvent; importjavax.swing.JButton; importjavax.swing.JFrame; importjavax.swing.JLabel; importjavax.swing.JPanel; importjavax.swing.border.EmptyBorder; publicclassReceiverFrameextendsJFrame{ /** * */ privatestaticfinallongserialVersionUID=1L; publicReceiverFrame(){ this.shows(); } publicvoidshows(){ setTitle("Receiver"); setSize(300,180); setContentPane(createContentPane()); addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEvente){ System.exit(0); } }); } privateJPanelcreateContentPane(){ JPanelp=newJPanel(newBorderLayout()); p.add(BorderLayout.NORTH, newJLabel("接收数据",JLabel.CENTER)); p.add(BorderLayout.CENTER,createCenterPane()); p.add(BorderLayout.SOUTH,createBtnPane()); p.setBorder(newEmptyBorder(6,6,6,6)); returnp; } privateJPanelcreateCenterPane(){ JPanelp=newJPanel(newBorderLayout()); p.add(BorderLayout.NORTH,createCipPane()); p.setBorder(newEmptyBorder(6,6,6,6)); returnp; } privateJPanelcreateCipPane(){ JPanelp=newJPanel(newGridLayout(2,1,0,6)); p.add(createIdPane()); p.add(createPwdPane()); returnp; } privateJPanelcreateIdPane(){ JPanelp=newJPanel(newBorderLayout(5,0)); p.add(BorderLayout.WEST,newJLabel("密文: ")); cipField=newJLabel(); p.add(BorderLayout.CENTER,cipField); returnp; } privateJPanelcreatePwdPane(){ JPanelp=newJPanel(newBorderLayout(5,0)); p.add(BorderLayout.WEST,newJLabel("解密: ")); decipField=newJLabel(); p.add(BorderLayout.CENTER,decipField); returnp; } privateJPanelcreateBtnPane(){ JPanelp=newJPanel(newFlowLayout()); JButtonbutton1=newJButton("解密"); JButtonbutton=newJButton("确认"); p.add(button1); p.add(button); getRootPane().setDefaultButton(button);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RSA 公钥算法Java代码带界面 算法 Java 代码 界面
![提示](https://static.bdocx.com/images/bang_tan.gif)