?? dsignature.java
字號:
/****************************************************************
* 軟件:Java簽名協(xié)議擴展 (Java Signature Protocol Extension, JSPE)
* 版本:V1.0
* 軟件功能:實現(xiàn)SSL簽名協(xié)議
* 模塊:公共類DSignature
*-----------------------------------------------------------------
* 版權(quán)所有:中山大學軟件研究所 2002
* Programmed by 佛山張峰嶺 fszfl@21cn.com
* 2002.4 - 2002.5
*****************************************************************/
package com.zsusoft.zfl;
import java.io.*;
import java.security.*;
/**********************
* 類DSignature實現(xiàn)SSL簽名協(xié)議DSignature的信息結(jié)構(gòu),提供了生成數(shù)字簽名和驗證數(shù)字簽名的方法。
**********************/
public class DSignature implements Serializable{
/**
* 簽名算法 取值范圍為SignatureAlgorithm的成員
**/
public byte signatureAlgorithm;
/**
* 簽名值長度
**/
public int signaturelength;
/**
* 簽名值
**/
public byte[] signatureValue;
/**
* 確省的生成函數(shù)產(chǎn)生空的數(shù)字簽名
**/
public DSignature()
{
signatureAlgorithm=SignatureAlgorithm.no_signature;
signaturelength=0;
signatureValue=null;
}
/**
* 這個生成函數(shù)用于產(chǎn)生數(shù)字簽名
* data為要生成簽名的數(shù)據(jù)
* 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;
}
/**
* 這個生成函數(shù)從字節(jié)緩沖區(qū)中恢復數(shù)字簽名
**/
public DSignature(byte Algorithm,int len,byte[] signature)
{
signatureAlgorithm=Algorithm;
signaturelength=len;
signatureValue=signature;
}
/**
* 驗證數(shù)字簽名
**/
public boolean Verify(byte[] data,PublicKey publickey) throws Exception
{
String Algorithm_desc=Algorithm_String(signatureAlgorithm);
if(signatureAlgorithm==SignatureAlgorithm.no_signature)
{
return true; //如果不需要簽名也算驗證通過
//return false; //沒有數(shù)字簽名
}
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內(nèi)容轉(zhuǎn)換成可視字符串
**/
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 + -