密码学课程设计啊。大整数的设计和实现,求大神。发邮箱enjoy361684563@163.com 能通过的话继续加分

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了密码学课程设计啊。大整数的设计和实现,求大神。发邮箱enjoy361684563@163.com 能通过的话继续加分相关的知识,希望对你有一定的参考价值。

题目:大整数运算包的设计与实现
1.问题描述
大整数运算是现代密码学算法实现的基础,重要性不言而喻。大整数我们指的是二进制位512、1024和2048的数,一般的语言不支持。
2.基本要求
以类库头文件的形式实现。
3.实现提示
在选择了大整数的存储结构之后,主要实现以下运算:
① 模加;
② 模减;
③ 模乘;
④ 模整除;
⑤ 模取余。这五种运算模拟手算实现。
⑥ 幂模:利用“平方-乘法”算法实现。
⑦ GCD:利用欧几里得算法实现。
⑧ 乘法逆: 利用扩展的欧几里得算法实现。
⑨ 素数判定与生成:概率性素数产生方法产生的数仅仅是伪素数,其缺点在于,尽管其产生合数的可能性很小,但是这种可能性仍然存在:其优点是产生的伪素数没有规律性,而且产生的速度也比较快。此类方法是生成大素数的主要方法,其中较著名的算法有:Miller Rabin算法、Solovay-Strassen算法等。本文讨论Miller Rabin算法。
Miller Rabin素性测试法是在实际中应用非常广的一种素性测试方案,可以用来判定某随机数是否为素数。其定义如下:
设n>2是一个奇数,设n-1=2sm,其中s是非负整数,m>0是奇数,设0<b<n,如果
bm≡-1(mod n),
或者存在一个r,0≤r<s,使得
b 2^r m≡-1(mod n)
则称n通过以b为基的Miller-Rabin测试。
可以利用Miller-Rabin素性测试算法来随机生成大素数,随即生成一个奇数n>2,随即均匀的选取序列b1,b2...,bk∈1,2,...,n-1,对n进行k次Miller-Rabin素性测试,如果每次输出都为“n可能是素数”,则n是合数的概率小于 1/4k当k足够大时,1/4k是一个十分小的数。
同学们在具体实现时,为了提高速度最好以空间换时间,在主程序运行前先构造一个大素数表。

参考技术A “一般的语言不支持。”是什么意思? 
你说的大整数 512、1024、2048这些integer类型就支持啊。
参考技术B 可以参照http://www-cs-students.stanford.edu/~tjw/jsbn/
你要的功能基本都可以实现,miller-rabin自己写一下,挺简单的

JAVA语言程序设计题目,求高人解答

3—9 编写一个字符界面的Java Application程序,接受用户输入的一个浮点数;把它的整数部分和小数部分分别输出。
3—10 编写一个字符界面的Java Application程序,接受用户输入的10个整数,比较并输出其中的最大值和最小值。
3—11编写一个字符界面的Java Application程序,接受用户输入的字符,以“#”标志输入的结束。比较并输出按字典序最小的字符。

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class A implements ActionListener
JFrame jf;
JLabel jl1;
JLabel jl2;
JLabel jl3;
JButton jb1;
JTextField jtf1;
JTextField jtf2;
JTextField jtf3;
public A()
init();
showMe();

public void init()
jf=new JFrame("拆分小数点");
jf.setLayout(new FlowLayout());
jl1=new JLabel("请输入小数");
jl2=new JLabel("整数为");
jl3=new JLabel("小数为");
jb1=new JButton("拆分");
jb1.addActionListener(this);
jtf1=new JTextField(10);
jtf2=new JTextField(10);
jtf2.setEditable(false);
jtf3=new JTextField(10);
jtf3.setEditable(false);
jf.add(jl1);
jf.add(jtf1);
jf.add(jl2);
jf.add(jtf2);
jf.add(jl3);
jf.add(jtf3);
jf.add(jb1);


public void showMe()
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
jf.setLocation(300, 300);
jf.pack();

@Override
public void actionPerformed(ActionEvent e)
String comm=e.getActionCommand();
if("拆分".equals(comm))
String s=jtf1.getText();
System.out.println(s);
if(s.contains("."))
String[] ss=s.split("\\.");
for (int i = 0; i < ss.length; i++)
System.out.println(ss[i]);

jtf2.setText(ss[0]);
jtf3.setText(ss[1]);



public static void main(String[] args)
new A();



import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class B implements ActionListener
public JFrame jf;
private JLabel jl1,jl2,jl3,jl4,jl5,jl6,jl7,jl8,jl9,jl10,jl11,jl12;
private JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6,jtf7,jtf8,jtf9,jtf10,jtf11,jtf12;

private JPanel jp1,jp2,jp3,jp4,jp5,jp6,jp7,jp8,jp9,jp10,jp11,jp12,jp13;
private JButton jb;
public B()
init();
showMe();

public void showMe()
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
jf.setLocation(300, 300);
jf.pack();

public void init()
jl1=new JLabel("输入第1个数字");
jl2=new JLabel("输入第2个数字");
jl3=new JLabel("输入第3个数字");
jl4=new JLabel("输入第4个数字");
jl5=new JLabel("输入第5个数字");
jl6=new JLabel("输入第6个数字");
jl7=new JLabel("输入第7个数字");
jl8=new JLabel("输入第8个数字");
jl9=new JLabel("输入第9个数字");
jl10=new JLabel("输入第10个数字");
jl11=new JLabel("最大值为");
jl12=new JLabel("最小值为");

jl11.setEnabled(false);
jl12.setEnabled(false);

jtf1=new JTextField(10);
jtf2=new JTextField(10);
jtf3=new JTextField(10);
jtf4=new JTextField(10);
jtf5=new JTextField(10);
jtf6=new JTextField(10);
jtf7=new JTextField(10);
jtf8=new JTextField(10);
jtf9=new JTextField(10);
jtf10=new JTextField(10);
jtf11=new JTextField(10);
jtf11.setEditable(false);
jtf12=new JTextField(10);
jtf12.setEditable(false);

jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();
jp4=new JPanel();
jp5=new JPanel();
jp6=new JPanel();
jp7=new JPanel();
jp8=new JPanel();
jp9=new JPanel();
jp10=new JPanel();
jp11=new JPanel();
jp12=new JPanel();
jp13=new JPanel();

jb=new JButton("确定");
jb.addActionListener(this);
jp1.setLayout(new FlowLayout());
jp1.add(jl1);
jp1.add(jtf1);
jp2.setLayout(new FlowLayout());
jp2.add(jl2);
jp2.add(jtf2);

jp3.setLayout(new FlowLayout());
jp3.add(jl3);
jp3.add(jtf3);

jp4.setLayout(new FlowLayout());
jp4.add(jl4);
jp4.add(jtf4);

jp5.setLayout(new FlowLayout());
jp5.add(jl5);
jp5.add(jtf5);

jp6.setLayout(new FlowLayout());
jp6.add(jl6);
jp6.add(jtf6);

jp7.setLayout(new FlowLayout());
jp7.add(jl7);
jp7.add(jtf7);

jp8.setLayout(new FlowLayout());
jp8.add(jl8);
jp8.add(jtf8);

jp9.setLayout(new FlowLayout());
jp9.add(jl9);
jp9.add(jtf9);

jp10.setLayout(new FlowLayout());
jp10.add(jl10);
jp10.add(jtf10);

jp11.setLayout(new FlowLayout());
jp11.add(jl11);
jp11.add(jtf11);

jp12.setLayout(new FlowLayout());
jp12.add(jl12);
jp12.add(jtf12);

jf=new JFrame("最大值最小值");
jf.setLayout(new GridLayout(13, 1));
jf.add(jp1);
jf.add(jp2);

jf.add(jp3);
jf.add(jp4);
jf.add(jp5);
jf.add(jp6);
jf.add(jp7);
jf.add(jp8);

jf.add(jp9);
jf.add(jp10);
jf.add(jp11);
jf.add(jp12);
jf.add(jb);


@Override
public void actionPerformed(ActionEvent e)
String comm=e.getActionCommand();
if("确定".equals(comm))
int i1=Integer.parseInt(jtf1.getText());
int i2=Integer.parseInt(jtf2.getText());
int i3=Integer.parseInt(jtf3.getText());
int i4=Integer.parseInt(jtf4.getText());
int i5=Integer.parseInt(jtf5.getText());
int i6=Integer.parseInt(jtf6.getText());
int i7=Integer.parseInt(jtf7.getText());
int i8=Integer.parseInt(jtf8.getText());
int i9=Integer.parseInt(jtf9.getText());
int i10=Integer.parseInt(jtf10.getText());
int arr[]=i1,i2,i3,i4,i5,i6,i7,i8,i9,i10;
Arrays.sort(arr);
int max=arr[9];
int min=arr[0];
jtf11.setText(max+"");
jtf12.setText(min+"");


public static void main(String[] args)
new B();



import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class C implements ActionListener
private JFrame jf;
private JLabel jl1,jl2;
private JTextField jtf1,jtf2;
JButton jb1;
public C()
init();
showMe();

public void init()
jf=new JFrame("字母排序");
jf.setLayout(new FlowLayout());
jl1=new JLabel("请输入字母");
jl2=new JLabel("排序后");
jb1=new JButton("排序");
jb1.addActionListener(this);
jtf1=new JTextField(10);
jtf2=new JTextField(10);
jtf2.setEditable(false);
jf.add(jl1);
jf.add(jtf1);
jf.add(jl2);
jf.add(jtf2);
jf.add(jb1);


public void showMe()
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
jf.setLocation(300, 300);
jf.pack();

@Override
public void actionPerformed(ActionEvent e)
String comm=e.getActionCommand();
if("排序".equals(comm))
String s=jtf1.getText();
char[] c=new char[s.length()];
if(s.endsWith("#"))

for (int i = 0; i < s.length(); i++)
c[i]=s.charAt(i);


Arrays.sort(c);
String ss="";
for (int i = 0; i < c.length; i++)
ss=ss+c[i];

jtf2.setText(ss.substring(1));


public static void main(String[] args)
new C();



都是有界面的,写界面不难 就是很麻烦。。。我自己写的 都是可以直接运行的,有什么问题可以再问我。。。
参考技术A 1. public static void main(String[] args)
Scanner sr=new Scanner(System.in);
System.out.println("请输入浮点数:");
float num=sr.nextFloat();
String number=num+"";
String[]nb=number.split("\\.");
for(int i=0;i<nb.length;i++)
System.out.println(nb[i]);


2.public static void main(String[] args)
int[] num=new int[10];
Scanner sc=new Scanner(System.in);
for(int i=0;i<num.length;i++)
num[i]=sc.nextInt();

Arrays.sort(num);
System.out.println("最大的数是:"+num[9]);
System.out.println("最小的数是:"+num[0]);


第三题不是很明白。!
参考技术B 第一个题目,你先将浮点数转化成string类型,然后string有个split方法就可以拆分。
第二个题目就是一个简单的比较问题,随便百度一下就可以有
第三个我不明白按字典序是什么一个概念

以上是关于密码学课程设计啊。大整数的设计和实现,求大神。发邮箱enjoy361684563@163.com 能通过的话继续加分的主要内容,如果未能解决你的问题,请参考以下文章

求推荐论坛或者网站可以找到计算机的课程设计或者毕业设计啊?

C语言课程设计 题目为设计一个多功能计算软件实现功能 求完美的代码

求计算机网络课程设计,采用VC、VB、java或C等编程语言编程实现。题目如下:任选一个

网页设计的实验报告,求大神指教!

C语言设计编程,求大神解答!一个字符串,求存在多少子序列为"LOVE" ?

求大神帮我做个设计 用JAVA 设计和实现学生信息管理系统,提供常见学生信息管理功能