- 浏览: 149826 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
zhuxinquan61:
你好,我是一个初学者,不知道是不是有validation.xm ...
struts中的Validator-rules.xml配置文件详解 -
wukele:
中文文件名压缩后是乱码~
JAVA压缩文件或文件夹的代码 -
suncjh:
高强度文件夹加密大师
U盘、移动硬盘加密工具绿色版 -
sbpcx:
assdust110 写道jiasky 写道请问楼主的头像是不 ...
Hibernate查询详解 -
yeshuang:
里面的很多的东西
SSH2整合步骤
1.
keytool -genkey -keystore chinajavaworld.keystore -alias chinajavaworld
这个命令用来产生一个密匙库,执行完毕后会在当前操作目录中产生一个chinajavaworld.keystore的文件,在执行命令的时候还有提示你输入密匙库的密码,要记住,后面还要用到。
2.
keytool -export -keystore chinajavaworld.keystore -alias chinajavaworld -file chinajavaworld.cer
这个命令用来产生签名时所要用的证书。
3.在JAVA里操作,将Cer内容改为BASE64编码
4.开始产生(测试)签名
接下来,你就可以把chinajavaworld.cer和签名放在你的产品目录里了。认证的时候读取cer证书中的公钥,对签名内容进行认证就可以了。
附
keytool -genkey -keystore chinajavaworld.keystore -alias chinajavaworld
这个命令用来产生一个密匙库,执行完毕后会在当前操作目录中产生一个chinajavaworld.keystore的文件,在执行命令的时候还有提示你输入密匙库的密码,要记住,后面还要用到。
2.
keytool -export -keystore chinajavaworld.keystore -alias chinajavaworld -file chinajavaworld.cer
这个命令用来产生签名时所要用的证书。
3.在JAVA里操作,将Cer内容改为BASE64编码
//从密钥库中读取CA证书 String storepass = "123456";//前面设置的密码 FileInputStream in = new FileInputStream("e:\\license\\a\\chinajavaworld.keystore"); KeyStore ks = KeyStore.getInstance("JKS"); ks.load(in, storepass.toCharArray()); //获取证书 java.security.cert.Certificate c1 = ks.getCertificate("chinajavaworld"); //BASE64编码 System.out.println(StringUtils.encodeBase64(c1.getEncoded()));//将chinajavaworld.cer内容改为这里输出的内容
4.开始产生(测试)签名
Signature signature; try { InputStream streamCert = new java.io.FileInputStream( "e:\\license\\a\\test.cer"); CertificateFactory factory = CertificateFactory.getInstance("X.509"); Certificate cert = factory.generateCertificate(streamCert); System.out.println(StringUtils.encodeBase64(cert.getEncoded())); signature = Signature.getInstance("SHA1withDSA"); signature.initVerify(cert.getPublicKey()); //要签名的指纹内容 String sss = "Welcome to www.chinajavaworld.com,The java world for you forever."; //获取CA证书私钥 PrivateKey priKey=(PrivateKey)ks.getKey("test",storepass.toCharArray()); System.out.println("priKey:"+StringUtils.encodeHex(priKey.getEncoded())); //用私钥签名 sig = Signature.getInstance("SHA1withDSA"); sig.initSign(priKey); ByteArrayOutputStream streamRaw0 = new ByteArrayOutputStream(); DataOutputStream streamSig0 = new DataOutputStream(streamRaw0); streamSig0.writeUTF(sss); sig.update(streamRaw0.toByteArray()); String signatureS = StringUtils.encodeHex(sig.sign()); System.out.println("signature: "+signatureS); //用公钥做验证测试 System.out.println("pubKey:"+StringUtils.encodeHex(cert.getPublicKey().getEncoded())); ByteArrayOutputStream streamRaw = new ByteArrayOutputStream(); DataOutputStream streamSig = new DataOutputStream(streamRaw); streamSig.writeUTF(sss); signature.update(streamRaw.toByteArray()); System.out.println("verify: "+signature.verify(StringUtils.decodeHex(signatureS))); } catch(Exception e) { System.out.println(e); }
接下来,你就可以把chinajavaworld.cer和签名放在你的产品目录里了。认证的时候读取cer证书中的公钥,对签名内容进行认证就可以了。
附
public static String encodeBase64(byte data[]) { boolean lineSep = false; int sLen = data == null ? 0 : data.length; if(sLen == 0) return new String(""); int eLen = (sLen / 3) * 3; int cCnt = (sLen - 1) / 3 + 1 << 2; int dLen = cCnt + (lineSep ? (cCnt - 1) / 76 << 1 : 0); char dArr[] = new char[dLen]; int s = 0; int d = 0; int cc = 0; do { if(s >= eLen) break; int i = (data[s++] & 0xff) << 16 | (data[s++] & 0xff) << 8 | data[s++] & 0xff; dArr[d++] = CA[i >>> 18 & 0x3f]; dArr[d++] = CA[i >>> 12 & 0x3f]; dArr[d++] = CA[i >>> 6 & 0x3f]; dArr[d++] = CA[i & 0x3f]; if(lineSep && ++cc == 19 && d < dLen - 2) { dArr[d++] = '\r'; dArr[d++] = '\n'; cc = 0; } } while(true); int left = sLen - eLen; if(left > 0) { int i = (data[eLen] & 0xff) << 10 | (left != 2 ? 0 : (data[sLen - 1] & 0xff) << 2); dArr[dLen - 4] = CA[i >> 12]; dArr[dLen - 3] = CA[i >>> 6 & 0x3f]; dArr[dLen - 2] = left != 2 ? '=' : CA[i & 0x3f]; dArr[dLen - 1] = '='; } return new String(dArr); } public static final 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(); } public static final 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) { int newByte = 0; newByte |= hexCharToByte(chars[i]); newByte <<= 4; newByte |= hexCharToByte(chars[i + 1]); bytes[byteCount] = (byte)newByte; byteCount++; } return bytes; }
评论
4 楼
beihan007
2010-11-27
楼主最近很活跃喔。
3 楼
caoyangx
2010-11-27
我是来看原作者出面指责楼主的。
2 楼
zheng12tian
2010-11-27
弄个demo上来看看
1 楼
pikenlike_123
2010-11-26
你最近发的帖子真多,这两天我都看过你三篇帖子了啊。
是不是转载过来的,如果转载过来的请注明哦;
是不是转载过来的,如果转载过来的请注明哦;
发表评论
-
少时诵诗书
2011-04-25 16:36 104011111111111111111111111111111 -
new struts2
2011-01-13 16:20 915new struts2 -
java获取本地机器所有IP和物理地址
2010-12-11 11:07 8317package com.cn; import java. ... -
用java随机画出两个圆,判断它们是否相交
2010-11-25 15:30 3975import java.awt.*; impor ... -
写一个较啰嗦;但是很好玩儿的java程序
2010-11-25 15:26 7251package com.cn; import java. ... -
java实现高性能的数据同步
2010-11-25 14:51 8907最近在做一个银 ... -
JAVA压缩文件或文件夹的代码
2010-11-25 09:31 2566package com.cn; import java. ... -
获取IP地址
2010-11-25 09:15 910package com.tianren.service; i ... -
java打印程序设计
2010-11-22 10:05 9681 前言 在我们的实际 ... -
各种排序算法java实现
2010-11-22 09:58 845package org.rut.util.algorithm. ... -
java中调用ORACLE存储过程
2010-11-22 09:47 1093一:无返回值的存储过程 存储过程为: CREATE OR ... -
增强Eclipse ,MyEclipse的代码提示功能(图文教程)V1.1
2010-11-19 09:27 853此文档需要下载![/size] -
myeclipse8.0下载 汉化 破解方法 及 svn配置
2010-11-19 09:21 1226今天到网上弄了一个MyEclipse8.0 的呵呵。包括可以汉 ... -
MyEclipse 8.0正式版发布+高速下载以及安装+注册码+破解+升级
2010-11-19 09:17 3736MyEclipse 8.0正式版发布+高速下载以及安装+注册码 ... -
java时间操作函数汇总
2010-11-18 13:15 828经常用到时间日期类,所以就将常用的日期方法和属性都归纳总结如下 ... -
Java文件下载的几种方式
2010-11-18 12:58 883public HttpServletResponse down ... -
Java发送邮件(包括文本,网页,附件)
2010-11-17 10:47 1823commons-email-1.2.jar: 这是Apache ... -
java.lang.String中的trim()方法的详细使用介绍
2010-11-15 11:31 5432String.Trim()方法到底为我们做了什么,仅仅是去除字 ...
相关推荐
总之,Java数字证书和数字签名是构建安全网络应用的核心技术,这个源码模块提供了一种实际的实现方式,可以帮助开发者更好地理解和应用这些概念。通过深入学习和实践,你可以提升在网络安全领域的专业技能,为构建更...
在本篇文章中,我们将深入探讨如何使用Java来获取数字证书的信息,包括使用TOMCAT和JDK搭建SSL服务的过程、如何用OpenSSL签发证书以及如何支持第三方CA等内容。 #### 一、使用TOMCAT和JDK搭建SSL服务 ##### 1. ...
本文利用Java技术实现客户端数字证书的签名和验证,关键在于理解数字签名的工作原理。数字签名是使用发送者的私钥对消息或文档进行加密的一种方式,接收者或其他人可以使用发送者的公钥来验证签名。这个过程确保了...
在Java编程环境中,生成数字证书是一项关键的安全技术,主要用于数据加密、身份验证和签名等应用场景。数字证书通常包含了公钥和私钥对,以及证书持有者的相关信息,这些信息经过认证机构(CA)的签名,确保了证书的...
Java 数字签名和数字证书是网络安全领域中的重要概念,它们在确保数据的完整性和认证信息来源的可靠性方面发挥着关键作用。在这个Java源码包中,我们可能找到了用于生成数字签名和数字证书的相关代码,这对于理解和...
本篇文章将深入探讨Java中如何实现安全通信、生成和使用数字证书。 首先,我们了解两个基础概念:消息摘要和消息验证码。消息摘要是一种算法,通过该算法对原始数据进行处理,生成一个固定长度的摘要值,类似于数据...
通过“Window” -> “Preferences” -> “Java” -> “Installed JREs” -> “Default VM arguments”添加Keystore路径和密码,以便在开发和测试过程中使用自定义的数字证书。 8. **数字证书与网络安全**: 数字...
以上代码展示了Java中如何使用RSA、DSA和ECC实现数字签名和验证的基本流程。实际应用中,可能还需要考虑密钥的存储和管理、证书链的验证等复杂情况。在提供的`JavaSignVerify`压缩包文件中,可能包含了示例代码,...
### 基于Java2的身份认证数字签名和SSL实现技术 #### Java2平台下的安全模型概览 在探讨Java2平台下实现身份认证、数字签名和SSL的技术细节之前,我们首先需要理解Java2平台所提供的一系列安全框架和工具。Java2...
Java 数字签名是一种用于验证数据完整性和发送者身份的...总的来说,Java数字签名提供了强大的安全功能,确保了在网络通信中的数据安全和身份认证。理解并正确使用数字签名和相关工具是开发安全的Java应用程序的基础。
在 Java 平台上,我们可以使用内置的 Keytool 和 Jarsigner 工具来实现数字签名的操作。以下是对这个主题的详细讲解: 一、数字签名的概念 数字签名并非我们日常生活中的笔迹签名,而是一种电子形式的签名,它结合...
在提供的`java数字签名jar.rar`和`java数字签名.zip`文件中,可能包含了具体的示例代码,展示了如何使用Java实现这些步骤。通过查看和学习这些代码,你可以更好地理解Java中的数字签名工作原理,以及如何在实际项目...
- **JCA (Java Cryptography Architecture)**:提供了加密框架,支持证书管理、数字签名、消息摘要等功能。 - **JCE (Java Cryptography Extension)**:扩展了JCA的功能,提供了更丰富的加密算法、密钥管理和消息...
在编程中,我们可以通过特定的类库实现这一功能,而在实际网络环境中,数字证书签名广泛应用在各种安全场景,如加密通信、软件认证和设备身份验证。理解并掌握这一技术对于保障网络安全至关重要。
综上所述,通过对加密算法、数字摘要、数字签名、数字证书的理解以及OpenSSL的实际操作,我们可以有效地保护数据的安全性和完整性,确保在线通信的安全可靠。同时,结合HTTPS和Tomcat7等技术的应用,能够进一步增强...
本文将深入探讨如何使用Java进行数字签名操作,结合提供的标签"源码"和"工具",我们将关注实际的代码实现。 首先,理解数字签名的概念至关重要。数字签名并非是数字的简单签名,而是一个通过加密算法生成的、与原文...
4. 签名与证书:数字签名通常与X.509证书结合使用,证书包含公钥和颁发者的身份信息,确保公钥的来源可信。 三、示例代码 在学习过程中,通过编写实际的Java代码来练习加密和数字签名的使用,例如: - 创建一个简单...
Java PDF实现电子签章是PDF文档处理中的一个重要技术,它涉及到PDF库的使用以及数字证书的应用。在这个场景中,我们关注的是使用iTextPDF和PDFBox两个流行的Java库来完成电子签章的功能。这两个库提供了丰富的API,...