📄 dsignature.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 + -