- 浏览: 281930 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (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 751一、什么是GPRS无线打印 ... -
关于 expression="execution(* com.xy.service.*.*(..))"
2015-05-21 09:22 2654先来看看这个spring的配 ... -
md5 sha1 java和javascript实现
2015-05-21 08:11 874<%@ page language="ja ... -
RSA帮助类
2014-11-21 09:36 921package 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 3098要求实现一个按字节截取字符串的方法,比如对于字符串&quo ... -
SSL多线程安全问题
2013-04-23 15:44 1756项目原因,代码实现 ... -
wait notify 对象锁
2013-03-14 15:21 1158通常,多线程之间需要协调工作。例如,浏览器的一个显示图片的 ... -
eclipse下配置hadoop环境
2012-12-05 11:44 1413按照http://smallbee.iteye.com ... -
centos虚拟机上安装运行hadoop(伪分布)
2012-11-15 15:28 19551、先在确认能否不输入口令就用ssh登录localhost: ... -
nio 远程主机强迫关闭了一个现有的连接 解决方案
2012-10-17 12:37 4599nio编程过程中会出现: Exception in thre ... -
java nio过程
2012-10-17 11:32 12331、服务端:ServerSocketChannel进行监听,注 ... -
socket 客户端连接池实现
2012-10-15 16:58 6710本文参考:http://cache.baidu.com/c?m ... -
java dom 解析xml例子
2012-08-02 14:09 1555XML格式如下: <?xml version=&quo ... -
DM5 java 例子
2012-08-02 10:38 1241package com.cmb.fbcbcserver; ... -
HTTP短连接模拟长连接 连接数不能超过2个
2012-08-01 15:47 2025项目中有用到服务器推技术,也是由于环境因素,银行系统,行内机房 ... -
java注解使用例子
2012-07-30 11:50 11781、注解定义: import java.lang.annot ...
相关推荐
数字签名通常基于非对称加密算法,如RSA或DSA。它的工作原理是:发送者使用私钥对消息的哈希值进行加密,这个加密后的结果就是数字签名。接收者收到消息和数字签名后,会使用发送者的公钥解密签名,并计算原始消息的...
RSA数字签名算法是一种基于公钥...这个项目对于理解RSA数字签名的工作原理和Java实现提供了直观的例子,对于密码学课程设计或实际应用开发都是宝贵的资源。通过学习和实践,你可以更好地掌握这一关键的网络安全技术。
数字签名的工作原理基于公钥加密算法,如RSA、DSA(数字签名算法)或ECC(椭圆曲线加密)。这些算法通常包括一对密钥:公钥和私钥。公钥是公开的,可以分发给任何需要与你通信的人;而私钥则必须保密,只有拥有者...
数字签名是利用非对称加密算法(如RSA或DSA)生成的,它将原始数据的哈希值与签名者的私钥结合在一起。接收者可以通过验证签名者的公钥和签名来确认数据的完整性和发送者的身份。这种机制可以防止数据被篡改,并能...
数字签名算法的应用非常广泛,以下是一些典型的例子: 1. 电子商务:在电子商务平台上,卖家可以用数字签名算法对商品信息进行签名,以确保信息的真实性和完整性。买家可以通过验证数字签名来确认商品的真实性。 2....
数字签名是一种重要的信息安全技术,主要用于验证数据的完整性和发送者的身份。在计算机科学,特别是密码学领域,数字签名并非实际的笔迹签名,而是通过复杂的数学算法生成的一段固定长度的二进制数据。这个数据附加...
在PurrfectPetShop1.0.exe的例子中,数字签名可能被用来保证软件的源代码完整无损,以及为用户提供一个安全的下载和安装体验。理解并正确使用数字签名对于维护网络安全至关重要,尤其是在处理敏感信息和重要应用程序...
标题中的“DSA”通常指的是“Dynamic Signature Algorithm”,这是一种在数字签名和加密领域中常见的算法。在IT行业中,DSA常用于确保数据的完整性和来源的不可否认性。它是一种非对称加密算法,由美国国家标准与...
DSA(Dynamic Signature Algorithm)是一种广泛应用于安全认证和数字签名的技术,尤其在智能卡、嵌入式系统以及软件更新流程中。在这个场景中,"DSA升级程序"指的是一个用于更新DSA相关数据或系统的工具。 DSA...
数据签名是一种用于验证电子信息完整性和发送者身份的技术,它在网络安全和数字信息交换中起着至关重要的作用。在JavaScript开发中,确保应用的安全性尤其重要,因为JavaScript代码通常运行在客户端,更容易受到攻击...
在IT领域,数字签名算法(Digital Signature Algorithm,简称DSA)是一种广泛应用的公钥密码学算法,主要用于数据的签名和验证,以确保数据的完整性和发送者的身份。C#是一种广泛用于开发Windows应用程序、Web服务和...
数字签名并非我们日常生活中的物理签名,而是一种电子形式的认证,它使用非对称加密算法,如RSA或DSA。在这个过程中,信息发送者(签发者)使用他们的私钥对消息的散列值进行加密,生成一个数字签名。接收者可以通过...
DSA(Digital Signature Algorithm,数字签名算法)是一种广泛应用于数据加密和验证身份的公钥密码体制。本篇文章将详细探讨如何在Java编程环境下使用DSA进行数据加密。 首先,我们需要理解DSA的基本原理。DSA基于...
4)数字签名:数字签名是一种用于验证数据完整性和发送者身份的技术。它结合了消息摘要和非对称加密。发送者使用自己的私钥对消息摘要进行加密,接收者可以使用发送者的公钥解密这个签名,然后对比解密后的摘要和...
在这个例子中,可能使用`KeyPairGenerator.getInstance()`方法指定算法(如RSA或DSA),并设置密钥长度。 2. **证书主体信息**:这通常包括证书序列号、有效期、主题(通常是请求证书的实体信息)、发行者(通常是...
第六章主要讨论的是数字签名标准(DSS)和其中的具体应用,特别是DSA(Digital Signature Algorithm)算法。DSS是用于确保电子通信中信息完整性和发送者身份验证的一种方法,而DSA是实现这一标准的一种具体算法。 ...
RSA广泛应用于数字签名和密钥交换,ECC则以其更小的密钥长度和更高的安全性脱颖而出,DSA主要用于数字签名。 3. **哈希函数**:哈希函数将任意长度的输入转换为固定长度的输出,如MD5(Message-Digest Algorithm 5...
* 应用:DSA 算法广泛应用于数字签名、身份验证等领域。 六、安全 SSH 的工作原理 * SSH 的体系结构:SSH 的体系结构包括客户端、服务器端和网络传输层。 * SSH 的认证和加密方式:SSH 使用公钥加密和对称加密来...