问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求救求救。。。刚学习JAVA,有没有JAVA的RSA完整算法????急。。。

发布网友 发布时间:2022-05-06 00:40

我来回答

4个回答

热心网友 时间:2023-10-10 07:42

1 RSA算法的原理如下:
1.1原理
假设我们需要将信息从机器A传到机器B,首先由机器B随机确定一个Key,我们称之为密匙private_key,将这个可KEY始终保存在机器B中而不发出来;然后,由这个private_key计算出另一个Key,我们称之为公匙Public_key。这个Public_key的特性是几乎不可能通过该Key计算生成它的private_key。接下来通过网络把这个Public_key传给机器A,
机器A受到Public_key后,利用该key,将信息加密,并把加密后的信息通过网络发送到机器B,最后机器B利用已知的private_key,就可以解开加密信息。
1.2步骤
RSA算法的安全性依赖于大数因数分解的困难性。公匙和私匙都是两个大素数的函数。
1.2.1
首先选择两个大素数p、q,计算n=p*q; m=(p-1)*(q-1);
1.2.2
而后随机选择加密密匙Public_key,要求和m互质,比如Public_key=m-1;
1.2.3
利用欧几里德算法计算解密密匙private_key,使private_key满足
Public_key*private_key三1(mod m)
其中Public_key,n是公匙,private_key是密匙
1.2.4
加密信息text时,利用公式secretword=text^Public_key (mod n)得到密文secretword
1.2.5
解密时利用公式word=text^private_key(mod n)得到原文word=text.。

2程序
本算法用JAVA编程语言实现,开发环境为Eclipse
//BJTU 软件0404
import java.io.*;

public class Rsa
{
private int p=0;
private int q=0;
private long n=0;
private long m=0;

private long public_key=0;//公匙
private long private_key=0;//密匙

private long text=0;//明文
private long secretword=0;//密文
private long word=0;//解密后明文

//判断是否为素数
public boolean primenumber(long t)
{
long k=0;
k=(long)Math.sqrt((double)t);
boolean flag=true;
outer:for(int i=2;i<=k;i++)
{
if((t%i)==0)
{
flag = false;
break outer;
}
}
return flag;
}
//输入PQ
public void inputPQ()throws Exception
{
do{
System.out.println("请输入素数p: ");
BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
String br=stdin.readLine();
this.p=Integer.parseInt(br);
}
while(!primenumber(this.p));
do{
System.out.println("请输入素数q: ");
BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
String br=stdin.readLine();
this.q=Integer.parseInt(br);
}
while(!primenumber(this.q));
this.n=this.p*this.q;
this.m=(p-1)*(q-1);
System.out.println("这两个素数的乘积为p*q:"+this.n);
System.out.println("所得的小于N并且与N互素的整数的个数为m=(p-1)(q-1):"+this.m);
}
//求最大公约数
public long *(long a,long b)
{
long *;
if(b==0)
*=a;
else
*=*(b,a%b);
System.out.println("*:"+*);
return *;

}
//输入公匙
public void getPublic_key()throws Exception
{
do{
System.out.println("请输入一个公钥的值,这个值要求小于m并且和m互质: ");
BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
String br=stdin.readLine();
this.public_key=Long.parseLong(br);
}while((this.public_key >= this.m) || (this.*(this.m,this.public_key)!=1));
System.out.println("公钥为:"+this.public_key);
}
//计算得到密匙
public void getPrivate_key()
{
long value=1;
outer:for(long i=1;;i++)
{
value=i*this.m+1;
System.out.println("value: "+value);
if((value%this.public_key==0)&& (value/this.public_key < this.m))
{
this.private_key=value/this.public_key;
break outer;
}
}
System.out.println("产生的一个私钥为:"+this.private_key);
}
//输入明文
public void getText()throws Exception
{
System.out.println("请输入明文:");
BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
String br=stdin.readLine();
this.text=Long.parseLong(br);
}
//加密、解密计算
public long colum(long y,long n,long key)
{
long mul;
if(key==1)
mul=y%n;
else
mul=y*this.colum(y,n,key-1)%n;
return mul;
}

//加密后解密
public void pascolum()throws Exception
{
this.getText();
System.out.println("输入明文为: "+this.text);
//加密
this.secretword=this.colum(this.text,this.n,this.public_key);
System.out.println("所得的密文为:"+this.secretword);
//解密
this.word=this.colum(this.secretword,this.n,this.private_key);
System.out.println("解密后所得的明文为:"+this.word);

}
public static void main(String []args)throws Exception
{
Rsa t = new Rsa();
t.inputPQ();
t.getPublic_key();
t.getPrivate_key();
t.pascolum();
}

}
3试验介绍
2.1输入PQ,计算m、n

3.2输入公匙,产生密匙

3.3输入明文,产生密文,并解密
此处时间*,明文暂时用个数字代替,有兴趣的可以改变程序,变成一段数字

请输入素数p:
23
请输入素数q:
29
这两个素数的乘积为p*q:667
所得的小于N并且与N互素的整数的个数为m=(p-1)(q-1):616
请输入一个公钥的值,这个值要求小于m并且和m互质:
611
*:1
*:1
*:1
*:1
公钥为:611
产生的一个私钥为:123
请输入明文:
311
输入明文为: 311
所得的密文为:653
解密后所得的明文为:311

热心网友 时间:2023-10-10 07:43

例如:import java.awt.*;
即把java包中awt组件包中所有的类添加进来了,类似的,你要指定某个类就要指定到他的具体位置,可以在类所在的文件包上用“*”,后者吧“*”换成制定的类名;
不知道回答的是否你想要的,希望会对你有帮助!努力加油!

热心网友 时间:2023-10-10 07:43

建议你去网上找资料,推荐中国最大的编程网站---“编程中国”www.bccn.net

热心网友 时间:2023-10-10 07:44

http://www.zeali.net/entry/58
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
茶映人生:苦尽甘来 海尔冰箱冷藏室和冷冻室都是空空的通上电工作会更耗电吗? 上菱冰箱用过7年了,1米5高有点大,我每天冰箱里面只冻半斤肉,冷藏室其它... 结婚前个人的保险结婚后转成存单是属于个人财产还是夫妻双方的财产_百 ... 六个月宝宝大便水样蛋花怎么办 宝宝拉蛋花样便怎么办 ...张仙亲送玉麒麟,一家老少皆欢喜,祖德宗功信可凭。 我见青山多妩媚,料青山见我应如是意思 料青山见我应如是的意思_百度知... 电脑导航用哪个比较好电脑用什么网址导航哪个更好用 电脑看地图哪个好电脑上的哪个地图软件好 请教各位高手,如何在JAVA中直接实现RSA加密来自输入流的文件. java RSA算法实现256位密钥怎么做 如何看待javascript和Java的RSA加密算法加密出来的密文不一致 java rsa加密,高并发如何解决 java给汉字进行RSA加密 java ibm jdk rsa 怎么 加密 java加密问题,RSA算法 基于java的rsa对文件加密。java写的后台 java中的rsa\des算法的方法 JAVA里面RSA加密算法的使用 Android中自带的RSA加密算法和JAVA中的不是一个标准的吗 鼻子去黑头产品,自然乐园竹炭套装还有猪鼻子三步贴哪个比较好?竹炭套装有没有去黑头 后收缩毛孔的功效 傅雷家书优秀片段摘抄加赏析 生猪肉水煮多久会熟 猪肉煮多久能熟 怎样吃燕麦减肥 小孩不吃奶瓶有什么办法,有什么好的方法 宝宝不肯吃奶,水也不怎么喝,看到奶瓶就哭 宝宝最近不太肯喝牛奶了,一看到奶瓶就推开,怎么办 宝宝不吃奶瓶怎么办 妈妈这样做就好 几年前的网贷现在又开始催收? 网贷逾期三年真实例子 MES系统如何设计打印机IP 我想问一下,无线扫描枪与条形码打印机能这样同步使用吗??? 青岛市北区十五中附近跳交谊舞的地方,最好有免费的,急,谢谢~~ 北京哪里有教人跳交谊舞的场所? 青岛市有跳交谊舞的舞厅吗?在哪里?怎么走? 青岛哪里有教中年人跳交谊舞的地方? 济南哪里有大众跳交谊舞的地方?很多地方都拆了 请问东莞市区哪里有跳交谊舞的地方? 青岛市北区有哪些舞蹈学习班 唐山哪里有跳交谊舞的地方 合肥2020年有跳交谊舞的舞厅吗? 怎么注销微? 鲁班说过的立志的名言有什么? 移动安的网络电视点播没写免费的要收费吗 移动网络电视点播时收费吗?在点播时会有提醒吗? 一个人怎么使用搓澡巾?我是南方人没用过这东西 浴池搓澡用手巾板怎么打 怎样合适的使用搓澡巾?