通过以下工具类可以生成DSA公钥和私钥文件
/**
*
*/
package com.yeatssearch.security;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
/**
* 生成DSA密钥对的工具类
* 使用方法:java DSAKeyPairGenerator -genkey public.key private.key
* public.key--生成的公钥文件名
* private.key--生成的私钥文件名
* @author Buffon
*
*/
public class DSAKeyPairGenerator {
private static final int KEYSIZE=512;
/**
* 生成DSA密钥对的工具类
* 使用方法:java DSAKeyPairGenerator -genkey public.key private.key
* public.key--生成的公钥文件名
* private.key--生成的私钥文件名
* @param args
*/
public static void main(String[] args) {
if(args[0].equals("-genkey")){
try {
KeyPairGenerator pairgen=KeyPairGenerator.getInstance("DSA");
SecureRandom random=new SecureRandom();
pairgen.initialize(KEYSIZE, random);
KeyPair keyPair=pairgen.generateKeyPair();
ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream(args[1]));
out.writeObject(keyPair.getPublic());
out.close();
out=new ObjectOutputStream(new FileOutputStream(args[2]));
out.writeObject(keyPair.getPrivate());
out.close();
} catch (NoSuchAlgorithmException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
}
/**
*
*/
package com.yeatssearch.security;
/**
* @author Buffon
*
*/
public interface DSA {
/**
* 进行签名的方法
* @param content 需要签名的内容
* @return
* @throws Exception
*/
public String sign(String content) throws Exception;
/**
* 验证签名的方法
* @param signature 签名
* @param contect 明文
* @return
* @throws Exception
*/
public boolean verify(String signature,String contect) throws Exception;
}
/**
*
*/
package com.yeatssearch.security;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.core.io.Resource;
import com.yeatssearch.util.common.StringUtil;
/**
* 在Spring中使用的DSA工具
*
* @author Buffon
*
*/
public class DSAService implements DSA {
private static Log log = LogFactory.getLog(DSAService.class);
private Resource privateKeyResource;
private Resource publicKeyResource;
private PublicKey publicKey;
private PrivateKey privateKey;
public String sign(String content) throws Exception {
try {
Signature signalg = Signature.getInstance("DSA");
signalg.initSign(privateKey);
signalg.update(content.getBytes());
byte[] signature = signalg.sign();
return StringUtil.bytesToHexString(signature);
} catch (Exception e) {
log.error(e);
throw e;
}
}
public boolean verify(String signature, String contecnt) throws Exception {
try {
Signature verifyalg = Signature.getInstance("DSA");
verifyalg.initVerify(publicKey);
verifyalg.update(contecnt.getBytes());
return verifyalg.verify(StringUtil.hexToBytes(signature));
} catch (Exception e) {
log.error(e);
throw e;
}
}
public void setPrivateKey(Resource privateKeyResource) throws Exception {
try {
this.privateKeyResource = privateKeyResource;
ObjectInputStream keyIn = new ObjectInputStream(
new FileInputStream(this.privateKeyResource.getFile()));
privateKey = (PrivateKey) keyIn.readObject();
keyIn.close();
} catch (Exception e) {
log.error(e);
throw e;
}
}
public void setPublicKey(Resource publicKeyResource) throws Exception {
try {
this.publicKeyResource = publicKeyResource;
ObjectInputStream keyIn = new ObjectInputStream(
new FileInputStream(this.publicKeyResource.getFile()));
publicKey = (PublicKey) keyIn.readObject();
keyIn.close();
} catch (Exception e) {
log.error(e);
throw e;
}
}
}
Spring中的配置
<bean id="dsaService" class="com.yeatssearch.security.DSAService">
<property name="publicKey" value="classpath:yeatssearch.publickey"/>
</bean>
分享到:
相关推荐
来自StackOverflow的 Jeffrey Walton 的文章中dsa数字签名算法的java实现,包括生成签名,消息签名,验证签名三个功能的实现。
java写的DSA数字签名算法,是密码学中的典型算法
用java实现dsa的签名算法,解决DSA签名的一些问题
rsa Elgamal及DSA的使用实例,运用此类算法加密解密及签名验签
主要介绍了Java数字签名算法DSA,结合实例形式分析了Java数字签名算法DSA具体定义与使用技巧,需要的朋友可以参考下
3.1.2 DSA签名过程 9 3.1.3 DSA签名验证 10 3.2 DSA算法证明 10 3.3 DSA算法变形 11 3.3.1 Yen和Laih的改进方法1 12 3.3.2 Yen和Laih的改进方法2 12 3.3.3 Naccache的改进方法 12 4. DSS参数产生 13 4.1 DSA素数产生...
主要介绍了常用数字签名算法RSA与DSA的Java程序内实现示例,一般来说DSA算法用于签名的效率会比RSA要快,需要的朋友可以参考下
BM算法求线性综合解和DES加密是用C++写的,DSA签名使用java写的。
Java语言的数字签名和认证实现代码。包括RSA签名认证、DSA、ECC三种签名认证方式。
主要介绍了Java使用DSA密钥对生成XML签名的方法,实例分析了java使用DSA密钥对生成XML签名的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
主要为大家详细介绍了eclipse实现DSA数字签名算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 Adleman AsymmetricCipher 算法)密钥,以及 NIST 的 FIPS-186 中定义的 DSA(数字签名算法)...
java关于加密的算法demo代码(Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法) JAVA安全实现三种方式: 1.JDK 2.Commons Codec 3.Bouncy Castle 一。非对称加密算法: 1.DH 2.RSA 3.ELGamal 二。...
本实验利用java对常见的数字签名算法如ElGamal,Schnorr,RSA-PSS,OSA,Rabin和其增强做了实现,另外有详细的实验报告和讲解。
并在此基础上,详细描述了Java 2平台中新增加的许多安全结构方面的措施,同时对Java安全性的实施提出了使用指导,描绘了如何定制、扩展和精化安全结构以及成功实现的技术细节。本书为建立安全、有效、强大和可移植的...
java 加密算法包括:消息摘要(MD5、SHA)、对称加密算法(DES),非对称加密算法RSA,数字签名DSA
包含Base64 包含对称加密算法:DES,3DEA,AES,PBE 包含对称加密算法:DH,RAS,ElGamal 包含摘要算法:MD2,MD4...数字签名算法:RSA,DSA,ECDSA 详情请查看:http://blog.csdn.net/baidu_34012226/article/details/53331147
4.2.3 配置一个可选Policy类的实现 72 4.2.4 缺省的策略文件格式 72 4.2.5 策略文件举例 75 4.2.6 策略文件中的属性扩展 76 4.3 数字证书 77 4.4 有用的安全工具 80 4.4.1 密钥数据库 80 4.4.2 keytool 82 4.4.3 ...
SHA加密算法,安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。
java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 Adleman AsymmetricCipher 算法)密钥,以及 NIST 的 FIPS-186 中定义的 DSA(数字签名算法)...