⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dsignature.java

📁 身份认证和数字签名在实际应用中是通过以数字证书为核心的公开密钥基础结构(PKI)来实现的
💻 JAVA
字号:
/****************************************************************
* 软件:Java签名协议扩展 (Java Signature Protocol Extension, JSPE)
* 版本:V1.0
* 软件功能:实现SSL签名协议
* 模块:公共类DSignature
*-----------------------------------------------------------------
*                                 版权所有:中山大学软件研究所 2002
*                                 Programmed by 佛山张峰岭 fszfl@21cn.com
*                                              2002.4 - 2002.5
*****************************************************************/
package com.zsusoft.zfl;
import java.io.*;
import java.security.*;
/**********************
* 类DSignature实现SSL签名协议DSignature的信息结构,提供了生成数字签名和验证数字签名的方法。
**********************/
public class DSignature implements Serializable{
   /**
   *  签名算法 取值范围为SignatureAlgorithm的成员
   **/
   public byte signatureAlgorithm;
   /**
   *  签名值长度
   **/
   public int signaturelength;
   /**
   *  签名值
   **/
   public byte[] signatureValue;
   /**
   * 确省的生成函数产生空的数字签名
   **/
   public DSignature()
   {
   	signatureAlgorithm=SignatureAlgorithm.no_signature;
   	signaturelength=0;
   	signatureValue=null;
   }
   /**
   *   这个生成函数用于产生数字签名
   *   data为要生成签名的数据
   *   Algorithm为指定的算法
   *   privatekey为私钥
   **/
   public DSignature(byte[] data,byte Algorithm,PrivateKey privatekey) throws Exception
   {
   	signatureAlgorithm=Algorithm;
   	String Algorithm_desc=Algorithm_String(signatureAlgorithm);
   	if(signatureAlgorithm==SignatureAlgorithm.no_signature)
   	{   
   	        signaturelength=0;
   	        signatureValue=null;
   	        return;
   	}
   	if(Algorithm_desc.equals("NoThis")){
   		   throw new NoSuchAlgorithmException("算法描述非法!");
   	}
   	Signature sign=Signature.getInstance(Algorithm_desc);
   	sign.initSign(privatekey);
   	sign.update(data);
   	signatureValue=sign.sign();
   	signaturelength=signatureValue.length;
   }
   /**
   *  这个生成函数从字节缓冲区中恢复数字签名
   **/
   public DSignature(byte Algorithm,int len,byte[] signature)
   {
   	signatureAlgorithm=Algorithm;
   	signaturelength=len;
   	signatureValue=signature;
   }
   /**
   *  验证数字签名
   **/
   public boolean Verify(byte[] data,PublicKey publickey) throws Exception
   {
   	String Algorithm_desc=Algorithm_String(signatureAlgorithm);
   	if(signatureAlgorithm==SignatureAlgorithm.no_signature)
   	{
   	   
   	        return true;      //如果不需要签名也算验证通过
   	        //return false;   //没有数字签名
   	}
   	if(Algorithm_desc.equals("NoThis")){
   		   throw new NoSuchAlgorithmException("没有合适的签名算法!");
   	}
   	Signature sign=Signature.getInstance(Algorithm_desc);
   	sign.initVerify(publickey);
   	sign.update(data);
   	return sign.verify(signatureValue);
   }
   /**
   *  返回签名算法中Java的字符串表达
   **/
   public String Algorithm_String(byte Algorithm)
   {
   	switch(Algorithm)
   	{
   	   case SignatureAlgorithm.no_signature:
   	        return "NO_Signture";
   	   case SignatureAlgorithm.sha1DSA:
   	        return "SHA1withDSA";
   	   case SignatureAlgorithm.md5DSA:
   	        return "MD5withDSA";
   	   case SignatureAlgorithm.sha1RSA:
   	        return "SHA1withRSA";
   	   case SignatureAlgorithm.md5RSA:
   	        return "MD5withRSA";
   	   default:
   	        return "NoThis";  //没有这种算法
   	}
   }
   /**
   *  把Dsignature内容转换成可视字符串
   **/ 
   public String toString()
   {
   	String msg;
   	msg="<DSignature>\r\n";
   	msg+="Algorithm:"+Algorithm_String(signatureAlgorithm)+"\r\n";
   	msg+="length:"+Integer.toString(signaturelength)+"\r\n";
   	msg+="signatureValue(Hex value):"+Conversion.byteArrayToHexString(signatureValue)+"\r\n";
   	msg+="</DSignature>\r\n";
   	return msg;
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -