eclipse实现DSA数字签名

所属分类: 软件编程 / java 阅读数: 63
收藏 0 赞 0 分享

DSA数字签名,供大家参考,具体内容如下

一、实验目的

在掌握了ElGamalSchorr数字签名算法的基础上,进一步地学习和掌握DSA签名算法。深入地理解该算法是如何降低了签名信息的长度(当其中一个重要参数 选为512bit的素数时,ElGamal签名的长度为1024bit,而DSA中通过160bit的素数 可以将签名的长度降低为320bit),从而减少了存储空间和传输带宽。

二、实验要求

4.学习DSA数字签名算法。
5.掌握如何使用Java BigInteger类,简单实现最基础的DSA公私钥签名算法。
6.深入地理解DSA签名算法与RSA算法的区别。

三、开发环境

JDK 1.7,Java开发环境(本实验采用Windows+eclipse作为实验环境),要求参与实验的同学按照对称加密提供的方法,提前安装好JDK。

四、实验原理

掌握了ElGamal和Schorr数字签名算法的基础上,进一步地学习和掌握DSA签名算法。深入地理解该算法是如何降低了签名信息的长度(当其中一个重要参数 选为512bit的素数时,ElGamal签名的长度为1024bit,而DSA中通过160bit的素数 可以将签名的长度降低为320bit),从而减少了存储空间和传输带宽

代码段:

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Random;


public class DSASign {
  public BigInteger p,q,g;
  public BigInteger x,y;
  
  public BigInteger _randomInZq(){
   BigInteger r= null;
   do {
   System.out.print(".");
   r = new BigInteger(160, new SecureRandom());
   }while(r.compareTo(q) >=0);
   System.out.print(".");
   return r;
  }
  
  public BigInteger _hashInZq(byte m[]){
   MessageDigest md;
   try {
   md = MessageDigest.getInstance("SHA-1");
   md.update(m);
   byte b[] = new byte[17];
   System.arraycopy(md.digest(), 0, b, 1, 16);
   return new BigInteger(b);
   }catch (NoSuchAlgorithmException e){
   System.out.print("This cannot happen!");
   }
   return null;
  }
  
  public void initKeys(){
   q = new BigInteger(160, 100, new SecureRandom());
   do {
   BigInteger t = new BigInteger(512, new SecureRandom());
   p = t.multiply(q).add(BigInteger.ONE);
   System.out.println("~");
   }while(!p.isProbablePrime(100));
   BigInteger h = _randomInZq();
   g = h.modPow(p.subtract(BigInteger.ONE).divide(q), p);
   x = _randomInZq();
   y = g.modPow(x, p);
   System.out.println("p : " + p);
   System.out.println("q : " + q);
   System.out.println("g : " + g);
   System.out.println("x : " + x);
   System.out.println("y : " + y);
  }
  
  public BigInteger[] signature(byte m[]){
   BigInteger k = _randomInZq();
   BigInteger sig[] = new BigInteger[2];
   sig[0] = g.modPow(k, p).mod(q);
   sig[1] = _hashInZq(m).add(x.multiply(sig[0])).mod(q)
   .multiply(k.modInverse(q)).mod(q);
   return sig;
  }
  public boolean verify(byte m[], BigInteger sig[]){
   BigInteger w = sig[1].modInverse(q);
   BigInteger u1 = _hashInZq(m).multiply(w).mod(q);
   BigInteger u2 = sig[0].multiply(w).mod(q);
   BigInteger v = g.modPow(u1, p).multiply(y.modPow(u2, p)).mod(p).mod(q);
   System.out.println("v = " + v);
   System.out.println("r = " + sig[0]);
   return v.compareTo(sig[0]) == 0;
  }
  
  public static void main(String args[]){
   DSASign dsa = new DSASign();
   dsa.initKeys();
   String message = "My name is xxx, my student number is xxxx.";
   System.out.println(message);
   BigInteger sig[] = dsa.signature(message.getBytes());
   System.out.println("DSASignture verifies result:" + dsa.verify(message.getBytes(),sig) );
  }
  
}

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

SpringBoot中使用Ehcache的详细教程

EhCache 是一个纯 Java 的进程内缓存框架,具有快速、精干等特点,是 Hibernate 中默认的 CacheProvider。这篇文章主要介绍了SpringBoot中使用Ehcache的相关知识,需要的朋友可以参考下
收藏 0 赞 0 分享

在idea 中添加和删除模块Module操作

这篇文章主要介绍了在idea 中添加和删除模块Module操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

java spring整合junit操作(有详细的分析过程)

这篇文章主要介绍了java spring整合junit操作(有详细的分析过程),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解JAVA 弱引用

这篇文章主要介绍了 JAVA 弱引用的相关资料,帮助大家更好的理解和学习java引用对象,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

深入了解JAVA 虚引用

这篇文章主要介绍了JAVA 虚引用的相关资料,帮助大家更好的理解和学习JAVA,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

详解JAVA 强引用

这篇文章主要介绍了JAVA 强引用的相关资料,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

java中的按位与(&)用法说明

这篇文章主要介绍了java中的按位与(&)用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

深入了解JAVA 软引用

这篇文章主要介绍了JAVA 软引用的相关资料,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

利用MyBatis实现条件查询的方法汇总

这篇文章主要给大家介绍了关于利用MyBatis实现条件查询的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用MyBatis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

Intellij IDEA 与maven 版本不符 Unable to import maven project See logs for details: No implementation for org.apache.maven.model.path.PathTranslator was bound

这篇文章主要介绍了Intellij IDEA 与maven 版本不符 Unable to import maven project See logs for details: No implementation for org.apache.maven.model.path.Pa
收藏 0 赞 0 分享
查看更多