`
jasonw68
  • 浏览: 153055 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

数字证书JAVA 后台处理

    博客分类:
  • J2SE
阅读更多
package com.gg.test;

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.security.Key;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;



public class TestSecurity {

	public static void main(String[] args){
		String caName="c:\\certificate.crt";
		TestSecurity ts = new TestSecurity();
		System.out.println("****读出数字证书******");
		ts.readNormal(caName);
		System.out.println("*****以字符串形式读出证书中得所有信息*****");
		ts.readBin(caName);
		
	}
	
	//读出证书方法
	public int readNormal(String caName){
		try {
			CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); //载入证书类型
			InputStream is = new FileInputStream(caName);//输入文件
			X509Certificate x509certificate =(X509Certificate) certFactory.generateCertificate(is);//解释输入文件
			/*打印一系列信息*/
			System.out.println( "类型: "+x509certificate.getType());//类型,此处为X.509
			System.out.println( "版本: "+x509certificate.getVersion());//版本
			System.out.println( "标题: "+x509certificate.getSubjectDN().getName());//标题
			System.out.println( "得到开始的有效日期: "+x509certificate.getNotBefore().toString());//得到开始的有效日期
			System.out.println( "得到截止的日期: "+x509certificate.getNotAfter().toString());//得到截止的日期
			System.out.println( "得到序列号: "+x509certificate.getSerialNumber().toString(16));//得到序列号
			System.out.println( "得到发行者名: "+x509certificate.getIssuerDN().getName());//得到发行者名
			System.out.println( "得到签名算法: "+x509certificate.getSigAlgName());//得到签名算法
			System.out.println( "得到公钥算法: "+x509certificate.getPublicKey().getAlgorithm());//得到公钥算法
			
			is.close();//关闭流
		} catch (Exception e) {
			e.printStackTrace();
			return -1;
		}
		return 0;
	}
	
	//以字符串形式读出证书中得所有信息
	public int readBin(String caName){
		try {
			InputStream is = new FileInputStream(caName);
			DataInputStream dis = new DataInputStream(is);
			CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
			byte[] bytes = new byte[dis.available()];
			dis.readFully(bytes);
			ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
			while(bais.available()>0){
				X509Certificate cert = (X509Certificate) certFactory.generateCertificate(bais);
				
				System.out.println(cert.toString());
			}
			is.close();
			dis.close();
		} catch (Exception e) {
			e.printStackTrace();
			return -1;
		}
		return 0;	
	}
	/*
	 * 使用自签证书实例
	 */
	public static void crypt(byte[] cipherText,String file){
		try {
			//生成公钥
			KeyGenerator keyGen = KeyGenerator.getInstance("DES");
			keyGen.init(56);
			Key key = keyGen.generateKey();
			
			//生成DES的Cipher
			Cipher cdes =Cipher.getInstance("DES");
			cdes.init(Cipher.ENCRYPT_MODE, key);
			byte[] ct = cdes.doFinal(cipherText);
			
			try {
				//加密后的文件写回磁盘
				FileOutputStream out = new FileOutputStream(file);
				out.write(ct);
				out.close();
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	/*
	 * 把消息发送给CA进行消息签名,或者说生成数字证书
	 */
	public void signature(byte[] sigText,String file,String pswd,String keyStore,String alias){
		char[] kpass;
		int i;
		try {
			KeyStore ks = KeyStore.getInstance("JKS");
			
			//keyStore默认为名字为.keyStore得隐藏文件,在用户的主目录下
			BufferedInputStream ksbufin = new BufferedInputStream(new FileInputStream(keyStore));
			
			//访问keyStore的密码
			kpass = new char[pswd.length()];
			for(i=0;i<pswd.length();i++){
				kpass[i]= pswd.charAt(i);
			};
			ks.load(ksbufin,kpass);
			
			//取得CA得私钥来进行数字签名
			PrivateKey priv =(PrivateKey)ks.getKey(alias, kpass);
			Signature rsa = Signature.getInstance("MD5withRSA");
			rsa.initSign(priv);
			rsa.update(sigText);
			byte[] sig = rsa.sign();
			System.out.println("sig is done");
			try {
				FileOutputStream out = new FileOutputStream(file);
				out.write(sig);
				out.close();
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	/*
	 * 接收消息对数字证书进行验证
	 */
	public static void veriSignature(byte[] updateData,byte[] sigedText,String certName){
		try {
			CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
			FileInputStream fin = new FileInputStream(certName);
			X509Certificate cert = (X509Certificate) certFactory.generateCertificate(fin);
			
			//通过自签证书获得公钥
			PublicKey pub = cert.getPublicKey();
			Signature rsa = Signature.getInstance("MD5withRSA");
			rsa.initVerify(pub);
			rsa.update(updateData);
			//验证
			boolean verifies = rsa.verify(sigedText);
			System.out.println("verified "+ verifies);
			if(verifies){
				System.out.println("Verify is done!");
			}else{
				System.out.println("verify is not successful");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		
	}
}

 

分享到:
评论

相关推荐

    java 国密算法实现包含SM2 SM3 SM4和数字签名、数字证书的验证

    下面将详细介绍这些算法以及它们在Java中的实现,以及如何进行数字签名和数字证书的验证。 1. **SM2算法**:SM2是一种基于椭圆曲线密码学(ECC)的公钥加密算法,用于非对称加密。它提供了密钥交换、签名和验证的...

    JAVA使用数字证书加密文件

    总结来说,这个项目涉及了Java中处理数字证书和使用RSA算法加密解密文件的关键技术。通过理解PFX文件的处理、密钥的提取、RSA加密解密原理以及测试代码的编写,开发者可以构建一个安全的文件加密系统,确保数据在...

    证书系统Java实现

    【证书系统Java实现】 在B/S(Browser/Server)架构的系统中,数字签名功能是确保数据完整性和用户身份安全的重要一环。本话题聚焦于如何利用Java技术结合微软的CAPICOM(CryptoAPI Com的对象)控件来实现在浏览器...

    java手工读取ejbca证书,并加密与解密操作

    EJBCA 是一个开源的 Public Key Infrastructure(PKI)系统,用于发放、管理数字证书。下面将详细阐述如何在 Java 中操作 EJBCA 证书进行加密和解密。 首先,你需要从 EJBCA 数据库中获取证书。这通常涉及到连接到 ...

    java类似蒲公英超级签名的后台完整实现.zip

    在Android开发中,每个APK在发布前都需要通过一个数字证书进行签名,以证明应用的来源和完整性。一般情况下,开发者使用自己的私钥对应用进行签名。而“超级签名”则通常指的是通过特殊方式,使得应用无需用户手动...

    功能全面的CA证书管理系统EJBCA6.2.0

    EJBCA是一款功能强大的CA(Certification Authority)证书管理系统,专为实现全面的数字证书管理而设计。这款系统基于J2EE(Java 2 Platform, Enterprise Edition)架构,能够帮助用户构建自己的认证中心,从而在...

    关于jbed的Java自动授权

    3. **免提示授权**:在某些情况下,开发者可能希望避免用户频繁的授权提示,这可以通过预设权限或者动态请求权限并在后台处理来实现。在Android中,可以通过在Manifest.xml中声明权限并使用运行时权限管理API来实现...

    基于Java的家校通管理系统源码(前台+后台).zip

    在这个系统中,Java主要负责业务逻辑处理和数据交互,通过Servlet和JavaBean实现服务器端的功能。Servlet是Java Web应用的核心组件,用于接收客户端请求,处理数据,并返回响应。JavaBean则封装了业务对象,提高了...

    JAVA调用U盾

    2. **签名验证**: 工行后台接收到转账请求及签名后,首先验证用户的密码是否正确,然后使用A的公钥对签名进行验证。 3. **操作确认**: 如果签名验证成功,则认为该操作是由用户A本人发起,从而允许转账操作继续进行...

    Java支付宝微信银联和H5支付功能

    在实际开发中,这些支付方式的集成往往需要考虑异常处理、支付状态的实时同步、退款功能、以及与后台数据库的交互等。同时,为了保证支付安全,需要对敏感信息进行加密处理,防止数据泄露。此外,良好的日志记录和...

    j2ee_cert.7z

    J2EE(Java 2 Platform, Enterprise Edition)平台提供了丰富的安全特性,其中数字证书认证系统就是一种常用的安全机制。本文将深入探讨一套名为“j2ee_cert”的J2EE数字证书认证系统,它涵盖了证书的申请、发放、...

    基于JAVA的安全电子商务(LW).zip

    这些组件可以帮助开发者实现数据加密、数字签名、证书管理以及网络安全通信等功能,为电子商务系统提供了坚实的安全基础。 1. **Java安全模型**:Java安全模型通过类加载器和访问控制器来限制代码的权限,防止恶意...

    java服务器端 支持 ios的推送 demo

    你需要在这里处理通知,例如显示横幅、弹出提醒或执行特定的后台任务。 四、推送策略和优化 1. 消息分发:确保只向活跃用户发送推送,避免无效推送浪费资源。 2. 推送消息格式:优化payload的大小,避免超过APNs...

    JAVA开发基于JAVA的安全电子商务(论文).zip

    3. **数字签名与证书**:Java支持数字签名和X.509证书,用于身份验证和数据完整性检查。这在电子商务交易中至关重要,防止了冒名顶替和数据篡改。 4. **HTTPS与SSL/TLS协议**:Java标准库包含了对HTTPS的支持,这是...

    基于Java的 iOS 推送通知

    在iOS平台上,推送通知是一种非常重要的功能,它允许应用程序在后台状态下向用户发送消息。本文主要探讨了如何基于Java实现iOS的推送通知。首先,我们需要理解iOS推送通知的基本原理。 **iOS推送通知原理** 1. **...

    基于JAVA的安全电子商务.doc

    身份认证包括用户的身份验证和信息的真实性验证,常用的有密码认证、数字证书认证等。信息认证则确保信息在传输过程中不被篡改。此外,认证机构的参与进一步增强了信任度。 【Go 2008电子商务系统】 Go 2008电子...

    Learn Java for Android Development_2nd.pdf

    - **签名**:使用数字证书对APK进行签名。 - **发布**:上传至Google Play商店或其他应用市场。 通过以上知识点的总结,《学习Java用于Android开发》第二版不仅提供了Java编程的基础知识,还深入介绍了如何利用Java...

    基于Java的两个通用安全模块的设计与实现

    1. **认证机制**:支持多种认证方式,如用户名密码、数字证书、OAuth等。 2. **角色与权限**:定义用户角色,分配不同角色的访问权限,实现细粒度的权限控制。 3. **会话管理**:有效管理用户的会话,防止会话劫持和...

    java推荐IOS消息包含所有包

    `javapns2.2`包含了处理证书、构建和发送推送消息所需的所有功能。 三、准备环境 1. 获取Apple开发者账号:你需要拥有一个Apple开发者账号,以便生成APNs证书。 2. 创建推送证书:在Apple Developer Portal中,为...

Global site tag (gtag.js) - Google Analytics