Java加密技术(六)
时间:2010-12-12
接下来我们介绍DSA数字签名,非对称加密的另一种实现。
DSA
DSA-Digital Signature Algorithm 是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。简单的说,这是一种更高级的验证方式,用作数字签名。不单单只有公钥、私钥,还有数字签名。私钥加密生成数字签名,公钥验证数据及签名。如果数据和签名不匹配则认为验证失败!数字签名的作用就是校验数据在传输过程中不被修改。数字签名,是单向加密的升级!
Java紗畜室宝?鎗?(2)
扮寂:2010-12-12
宥狛java旗鷹糞?泌和?Coder窃需 Java紗畜室宝?匯?
Java旗鷹
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.Signature;
import java.security.interfaces.DSAPrivateKey;
import java.security.interfaces.DSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;
/**
* DSA芦畠園鷹怏周
*
* @author 塑彊
* @version 1.0
* @since 1.0
*/
public abstract class DSACoder extends Coder {
public static final String ALGORITHM = "DSA";
/**
* 潮範畜埒忖准方
*
* <pre>
* DSA
* Default Keysize 1024
* Keysize must be a multiple of 64, ranging from 512 to 1024 (inclusive).
* </pre>
*/
private static final int KEY_SIZE = 1024;
/**
* 潮範嶽徨
*/
private static final String DEFAULT_SEED = "0f22507a10bbddd07d8a3082122966e3";
private static final String PUBLIC_KEY = "DSAPublicKey";
private static final String PRIVATE_KEY = "DSAPrivateKey";
/**
* 喘暴埒斤佚連伏撹方忖禰兆
*
* @param data
* 紗畜方象
* @param privateKey
* 暴埒
*
* @return
* @throws Exception
*/
public static String sign(byte[] data, String privateKey) throws Exception {
// 盾畜喇base64園鷹議暴埒
byte[] keyBytes = decryptBASE64(privateKey);
// 更夛PKCS8EncodedKeySpec斤?
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
// KEY_ALGORITHM 峺協議紗畜麻隈
KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
// 函暴埒革斤?
PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec);
// 喘暴埒斤佚連伏撹方忖禰兆
Signature signature = Signature.getInstance(keyFactory.getAlgorithm());
signature.initSign(priKey);
signature.update(data);
return
|