【算法导论】【第二周】

来源:互联网 发布:linux 开源 编辑:程序博客网 时间:2024/04/27 23:37
1. 资料阅读。 (20分钟)
     查阅 百度百科(http://baike.baidu.com/ )中“RSA”、“数字签名”、“公钥”、“DES”等4个名词的解释。理解 公钥加密 与 数字签名 之间的联系与区别,能够用自己的话阐述两者的概念。
答:http://bbs.csdn.net/topics/80025718
阐述与理解:
公钥加密的公钥是对任何人公开的,但是公钥加密的信息必须用私钥来解密,用私钥签名的数据只能用公钥验证。
数字签名可以由公钥构成,接收方可以通过验证数字签名与发送方的数据和公钥来验证信息。认为数字签名要比公钥加密广泛。但是数字签名中的公钥却是每个人都可以验证,这是不保密的。
数字签名通过哈希算法对信息进行摘要产生唯一又紧凑的信息,并用自己的私钥产生数字签名,保密信息。


=======================================================================================
判断一个正整数是否为质数的算法。函数签名如下
     int isPrime(long a)
    输入:一个长整数a
    输出:返回1(为质数),返回0(非质数)
----------------------------------------------------------------
[java] view plaincopy
  1. public int main() {  
  2.         Scanner in=new Scanner(System.in);  
  3.         System.out.print("请输入一个正整数: ");  
  4.         int n = in.nextInt();  
  5.         int b=0;  
  6.         for(int i=2;i<Math.sqrt(n);i++){  
  7.             if(n%i==0)  
  8.                 return b;  
  9.             else   
  10.                 b=1;  
  11.         }  
  12.         return b;  
  13.     }  













==========================================================================================================================
随机生成一个n bit位的长整数。函数签名如下
    long createRndInteger(int n)
    输入:随机数bit位的长度为n(解释:3bit位,则最大为111,最小为100;n bit位,则该数字二进制长度为n)
    输出:返回该随机数
--------------------------------------------------------------
[java] view plaincopy
  1. package createRndInteger;  
  2.   
  3. import java.util.Random;  
  4. import java.util.Scanner;  
  5.   
  6. public class CreateRndInteger {  
  7.     public static void main(String[] args) {  
  8.         System.out.print("请输入随机生成  n bit的长整数的 n : ");  
  9.         Scanner scan=new Scanner(System.in);  
  10.         int n=scan.nextInt();  
  11.         String rnd=createRndInteger(n);  
  12.         System.out.println("随机生成 "+n+" bit的长整数是: "+rnd);  
  13.     }  
  14.       
  15.     public static String createRndInteger(int n){  
  16.         /* 
  17.         StringBuilder sb = new StringBuilder(digCount);   
  18.         for(int i=0; i < digCount; i++)   
  19.             sb.append((char)('0' + rnd.nextInt(10)));   
  20.         return sb.toString();   
  21.         */  
  22.         Random rnd=new Random();  
  23.         StringBuilder sb=new StringBuilder(n);  
  24.         for(int i=0;i<n;i++)  
  25.             sb.append((char)('1'+rnd.nextInt(n)));  
  26.         return sb.toString();  
  27.     }  
  28.   
  29. }  






================================================================================
随机生成一个n bit位的长质数。函数前面如下
    long createRndPrime(int n)
    输入:随机质数的bit位长度为n
    输出:nbit位长度的质数
    关键为使用随机化算法判断一个长整数是否为素数(P33)
---------------------------------------------------------------------------
通过完成前面两题,第三题可以将前面两题结合起来解决?

0 0
原创粉丝点击