- 浏览: 276827 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (153)
- unix (2)
- sql (3)
- pl/sql (1)
- cvs (1)
- core java (36)
- OOAD UML (1)
- XML (4)
- JDBC (5)
- Hibernate (1)
- HTML (1)
- javascript (2)
- servlet (2)
- jsp (1)
- AJAX (1)
- Struts1.x (0)
- Struts2.x (5)
- Spring (6)
- EJB (2)
- WebService (2)
- 生活 (2)
- 感情 (0)
- 其他 (9)
- jbuilder2005 (1)
- db2 (1)
- groovy (1)
- 银行业务 (1)
- Android (9)
- java设计模式 (8)
- J2SE (2)
- DataBase (4)
- lucene (2)
- java卡 (1)
- flex (3)
- 烹饪 (1)
- 测试 (1)
- java硬件 (2)
- upnp (3)
- S2SH lib (1)
- nio CshBBrain (1)
- socket (1)
- 二维码 (1)
- 热加载 (1)
- hadoop (3)
- NIO (1)
- 新银行前置机预研 (1)
- springmvc3 (1)
- jvm (1)
- sf (0)
最新评论
-
niwowl:
可以!
gson使用在android使用例子 -
smallbee:
xin_jmail 写道首先感谢楼主的文章,让我知道了lock ...
java ReentrantLock Condition调试记录 -
xin_jmail:
首先感谢楼主的文章,让我知道了lock.newConditio ...
java ReentrantLock Condition调试记录 -
smallbee:
brad2309 写道lz 你的两个messageReceiv ...
基于Apache Mina实现的TCP长连接和短连接实例 -
brad2309:
lz 你的两个messageReceived方法是不是错乱了
基于Apache Mina实现的TCP长连接和短连接实例
1、DSA公钥私钥生成类:
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; /** * <p> * Title: * 生成DSA密钥对的工具类 * 使用方法:java DSAKeyPairGenerator -genkey public.key private.key * public.key--生成的公钥文件名 * private.key--生成的私钥文件名 * </p> * * <p> * Description: * </p> * * <p> * Copyright: 融博技术有限公司 2012 * </p> * * @author 袁泉锋HO174959 * @version 1.0 * @date Jul 30, 2012 * */ 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(); } } } }
2、DSA服务类
import java.io.ObjectInputStream; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; /** * <p> * Title: 签名服务类 * </p> * * <p> * Description: * </p> * * <p> * Copyright: 融博技术有限公司 2012 * </p> * * @author 袁泉锋HO174959 * @version 1.0 * @date Jul 30, 2012 * */ public class DSAService { private PublicKey publicKey; //公钥 给对方的 private PrivateKey privateKey; //私钥 自己保存好 public DSAService() throws Exception { try { ObjectInputStream keyIn = new ObjectInputStream(DSAService.class.getResourceAsStream("/bb.key")); privateKey = (PrivateKey) keyIn.readObject(); keyIn.close(); ObjectInputStream keyIn2 = new ObjectInputStream(DSAService.class.getResourceAsStream("/aa.key")); publicKey = (PublicKey) keyIn2.readObject(); keyIn2.close(); } catch (Exception e) { throw e; } } /** * <Description>对内容进行签名 * * @since Jul 30, 2012 * @param content * @return * @throws Exception <Description> * */ 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 encodeHex(signature); } catch (Exception e) { e.printStackTrace(); throw e; } } /** * <Description>对明文进行验签,确定contecnt是否是对方的信息 * * @since Jul 30, 2012 * @param signature * @param contecnt * @return * @throws Exception <Description> * */ 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(decodeHex(signature)); } catch (Exception e) { e.printStackTrace(); throw e; } } /** * <Description>把二进制对象转化为16进制串(用字符串表示) * * @since Jul 30, 2012 * @param bytes * @return <Description> * */ private String encodeHex(byte[] bytes) { StringBuffer buf = new StringBuffer(bytes.length * 2); for (int i = 0; i < bytes.length; ++i) { if ((bytes[i] & 0xFF) < 16) { buf.append("0"); } buf.append(Long.toString(bytes[i] & 0xFF, 16)); } return buf.toString(); } /** * <Description>把字符串(该串标表示的是16进制)转化为二进制对象 * * @since Jul 30, 2012 * @param hex * @return <Description> * */ private byte[] decodeHex(String hex) { char[] chars = hex.toCharArray(); byte[] bytes = new byte[chars.length / 2]; int byteCount = 0; for (int i = 0; i < chars.length; i += 2) { byte newByte = 0; newByte = (byte) (newByte | hexCharToByte(chars[i])); newByte = (byte) (newByte << 4); newByte = (byte) (newByte | hexCharToByte(chars[(i + 1)])); bytes[byteCount] = newByte; ++byteCount; } return bytes; } private byte hexCharToByte(char ch) { switch (ch) { case '0': return 0; case '1': return 1; case '2': return 2; case '3': return 3; case '4': return 4; case '5': return 5; case '6': return 6; case '7': return 7; case '8': return 8; case '9': return 9; case 'a': return 10; case 'b': return 11; case 'c': return 12; case 'd': return 13; case 'e': return 14; case 'f': return 15; } return 0; } public static void main(String[] aa){ try { DSAService ss = new DSAService(); String dd = ss.sign("yqf"); //对"yqf"签名 System.out.println(dd); //签名后 boolean isSucc = ss.verify(dd, "yqf"); //对明文进行验签 System.out.println(isSucc); } catch (Exception e) { e.printStackTrace(); } } }
通过例子,不难发现,DSA只能做签名,不是做加密用的。
签名是什么概念,就是说,你收到一个东西,你要验证下是不是你希望的那个人发送过来的,否则我不要,这就是签名。
- DSA.rar (8.3 KB)
- 下载次数: 5
发表评论
-
bike1
2015-12-07 17:10 0rt -
GPRS打印机的原理
2015-07-31 09:09 712一、什么是GPRS无线打印 ... -
关于 expression="execution(* com.xy.service.*.*(..))"
2015-05-21 09:22 2599先来看看这个spring的配 ... -
md5 sha1 java和javascript实现
2015-05-21 08:11 845<%@ page language="ja ... -
RSA帮助类
2014-11-21 09:36 891package com.cmb.fmserver.passp ... -
src2014-2-17
2014-02-17 21:55 0rt -
springmvc例子
2014-02-11 11:09 0rt -
qhdescjyw
2014-02-11 10:33 0rt -
按字节截取含有中文汉字的字符串
2013-05-07 18:55 3057要求实现一个按字节截取字符串的方法,比如对于字符串&quo ... -
SSL多线程安全问题
2013-04-23 15:44 1701项目原因,代码实现 ... -
wait notify 对象锁
2013-03-14 15:21 1126通常,多线程之间需要协调工作。例如,浏览器的一个显示图片的 ... -
eclipse下配置hadoop环境
2012-12-05 11:44 1382按照http://smallbee.iteye.com ... -
centos虚拟机上安装运行hadoop(伪分布)
2012-11-15 15:28 19291、先在确认能否不输入口令就用ssh登录localhost: ... -
nio 远程主机强迫关闭了一个现有的连接 解决方案
2012-10-17 12:37 4543nio编程过程中会出现: Exception in thre ... -
java nio过程
2012-10-17 11:32 12071、服务端:ServerSocketChannel进行监听,注 ... -
socket 客户端连接池实现
2012-10-15 16:58 6605本文参考:http://cache.baidu.com/c?m ... -
java dom 解析xml例子
2012-08-02 14:09 1507XML格式如下: <?xml version=&quo ... -
DM5 java 例子
2012-08-02 10:38 1203package com.cmb.fbcbcserver; ... -
HTTP短连接模拟长连接 连接数不能超过2个
2012-08-01 15:47 1988项目中有用到服务器推技术,也是由于环境因素,银行系统,行内机房 ... -
java注解使用例子
2012-07-30 11:50 11421、注解定义: import java.lang.annot ...
相关推荐
DSA数字签 DSA数字签DSA数字签名 DSA数字签名
实现数字签名算法以及验证数字签名算法的正确性。本程序经本人验证
详细的DSA源码,并经过验证和分析,对DSA数字签名的安全分析非常有用
DSA数字签名算法 包括MD5,sha1的信息摘要算法。文件导入功能
我不知道是这个DSA算法本身有问题还是什么.验证签名这块也有问题
DSA 数字签名 本程序实现DSA数字签名 是学习和研究密码学的良好资源 DSA 数字签名 本程序实现DSA数字签名 是学习和研究密码学的良好资源
java写的DSA数字签名算法,是密码学中的典型算法
实现数字签名功能,通过DSA算法实现,包含源程序等
DSA数字签名的安全性分析
DSA 数字签名算法 VC++实现 绝对好用 能够对文件进行数字签名 防止篡改
通过实现数字签名算法(DSA),加深对数字签名算法的理解,同时学习Hash算法的实现。 1)利用C\C++语言实现DSA算法。 2)DSA中的Hash函数采用SHA算法。
?理解公钥密码及数字签名相关的基本概念 ?理解并能够编写RSA或DSA数字签名算法 ?熟练应用C++编程实现数字签名体制
1)利用C\C++语言实现DSA算法。 2)DSA中的Hash函数采用SHA算法。 (1)消息填充:因为我们存储的时候是以字节为单位存储的,所以消息的长度(单位:位)一定是 8 的倍数。而我们填充的时候也一定是 8 位、8 位...
DSA数字签名算法.doc
DSA数字签名算法.pdf 学习资料 复习资料 教学资源
来自StackOverflow的 Jeffrey Walton 的文章中dsa数字签名算法的C#实现,包括生成签名,消息签名,验证签名三个功能的实现。
DSA数字签名算法
实验三 DSA数字签名算法.doc
DSA数字签名实验原理.pdf 学习资料 复习资料 教学资源