`

java安全6

    博客分类:
  • java
 
阅读更多
package com.ngsn.security;


import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;

/**
 * 数字签名(私钥签名公钥校验)
 * 此 Signature 类用来为应用程序提供数字签名算法功能。
 * 数字签名用于确保数字数据的验证和完整性。
 * @author John.Yao
 */
public class SecretKeyTest5 {
	
	public static void main(String[] args) throws Exception{
		signature();
		verify();
		
	}
	/**
	 * 签名
	 * 根据私钥对数据进行签名,生成签名字节
	 */
	private static void signature() throws Exception{
		//签名
		KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
		KeyPair keyPair = generator.generateKeyPair();
		PublicKey publicKey = keyPair.getPublic();
		PrivateKey privateKey = keyPair.getPrivate();
		//创建signature对象
		Signature signature = Signature.getInstance("SHA1withRSA");
		//私钥进行签名
		signature.initSign(privateKey);
		//更新要由字节签名或验证的数据。
		signature.update("到底是怎么回事,为什么不行呢".getBytes());  //签名的数据
		//返回所有已更新数据的签名字节。
		byte[] result = signature.sign();     //得到签名的字节
		saveKey(publicKey,"sign_public.key");
		saveData(result,"mysign.data");
	}
	/**
	 * 校验
	 * 根据公钥和签名字节进行数据的校验
	 * @throws Exception 
	 */
	private static void verify() throws Exception{
		//校验
		//创建signature对象
		Signature signature = Signature.getInstance("SHA1withRSA");
		//从文件中读取保存的公钥
		PublicKey publicKey = (PublicKey)readKey("sign_public.key");
		//公钥进行校验
		signature.initVerify(publicKey);
		//添加校验的数据
		signature.update("到底是怎么回事,为什么不行呢".getBytes());    
		//从文件中读取保存的签名字节
		byte[] signed = readData("mysign.data");
		//根据签名字节进行校验
		boolean b = signature.verify(signed);
		
		if(b){
			System.out.println("校验结果:"+b+",是自己的签名");
		}else{
			System.out.println("校验结果:"+b+",不是自己的签名");
		}
	}
	/**
	 * 保存密钥到指定的文件中
	 * @param publicKey
	 * @param fileName
	 * @throws Exception
	 */
	public static void saveKey(PublicKey publicKey,String fileName) throws Exception{
		FileOutputStream fosKey = new FileOutputStream(fileName);
		ObjectOutputStream oosSecretKey = new ObjectOutputStream(fosKey);
		//将密钥保存到zxx_secret.key文件中
		oosSecretKey.writeObject(publicKey);
		oosSecretKey.close();
		fosKey.close();
	}
	/**
	 * 保存数据到指定的文件中
	 * @param data
	 * @param fileName
	 * @throws Exception
	 */
	public static void saveData(byte[] data,String fileName) throws Exception{
		FileOutputStream fosData = new FileOutputStream(fileName);
		fosData.write(data);
		fosData.close();
	}
	/**
	 * 从指定的文件中读取密钥
	 * @param fileName
	 * @return
	 * @throws Exception
	 */
	public static Key readKey(String fileName) throws Exception{
		FileInputStream fisKey = new FileInputStream(fileName);
		ObjectInputStream ois = new ObjectInputStream(fisKey);
		Key key = (Key)ois.readObject();
		ois.close();
		fisKey.close();
		return key;
	}
	/**
	 * 从指定的文件中读取数据
	 * @param fileName
	 * @return
	 * @throws Exception
	 */
	public static byte[] readData(String fileName) throws Exception{
		FileInputStream fis = new FileInputStream(fileName);
		byte[] buffer = new byte[1024];
		int len = 0;
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		while((len = fis.read(buffer)) != -1){
			bos.write(buffer, 0, len);
		}
		//从输出流中得到byte[]的加密数据
		byte[] result = bos.toByteArray();
		fis.close();
		bos.close();
		return result;
	}
}



















分享到:
评论

相关推荐

    P神-Java安全漫谈

    Java安全是指在Java编程和应用开发过程中采取的一系列措施,旨在保护Java应用程序、系统和数据免受恶意攻击、数据泄露和其他安全威胁的影响。Java安全主要涉及以下几个方面: 代码安全性:Java提供了强大的安全机制...

    Java安全编码标准

    资源名称:Java安全编码标准内容简介:《java安全编码标准》是java安全编码领域最权威、最全面、最详细的著作,java之父james a. gosling推荐。不仅从语言角度系统而详细地阐述java安全编码的要素、标准、规范和最佳...

    Java安全开发规范

    Java的安全开发技术规范以及安全开发注意要点

    Java安全编码标准_PDF电子书下载 带索引书签目录_完整版

    可以将本书作为java安全方面的工具书,根据自己的需要,找到自己感兴趣的规则进行阅读和理解,或者在实际开发中遇到安全问题时,根据书中列出的大致分类对规则进行索引和阅读,也可以通读全书的所有规则,系统地了解...

    java 安全编程指南

    Java安全编程指南旨在帮助开发者在使用Java编程时遵循最佳的安全实践,以保护应用程序免受潜在威胁。Java作为一种跨平台的编程语言,其安全性是其核心特性之一,但如果不正确地编写代码,可能会引入安全隐患。本指南...

    Java安全性编程实例

    Java安全性编程实例主要涵盖的是Java平台上的安全机制和实践,这对于任何希望构建可靠、安全的Java应用程序的开发者来说都是至关重要的。Java作为一种跨平台的编程语言,其安全性是其核心特性之一,它提供了多种机制...

    Java安全技术

    Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全技术Java安全...

    Java安全性编程源代码

    7. **ch6** - 可能是关于“沙箱之外:扩展Java安全”的章节。这里可能会讲解如何为Java添加新的安全功能,例如通过实现`java.security.Policy`接口自定义安全策略,或者使用`java.security.PrivilegedAction`和`java...

    Java安全编码培训.pdf

    Java安全编码培训是针对Java开发人员进行的一项专业培训,旨在提升程序员在编写代码时对安全性问题的认识和能力,防止在软件开发过程中引入安全隐患。本次培训涵盖了安全编码的重要性和基本概念,包括安全编码考核...

    java安全编程指南

    Java安全编程指南是一本专为Java开发者设计的重要教材,它深入探讨了在开发过程中如何确保代码的安全性。这本书涵盖了各种关键主题,旨在帮助程序员避免常见的安全漏洞,保护系统免受恶意攻击,并创建可靠的软件产品...

    Java安全性编程指南

    Java安全性编程指南是Java开发者必备的知识领域,它涵盖了在开发Java应用程序时确保代码安全的一系列原则、最佳实践和工具。Java作为一个广泛使用的平台,其安全性对于保护用户数据、防止恶意攻击至关重要。本指南将...

    java安全性编程指南,JAVA安全性编程已成为当前JAVA编程者的主要课题,本资料是解决此类问题的权威资料。

    Java安全性编程是现代Java开发中不可或缺的一部分,尤其是在网络应用、移动设备和企业级系统中,保护用户数据和系统安全显得尤为重要。本指南旨在提供全面的Java安全编程实践和策略,帮助开发者构建更安全的Java应用...

    Java安全性编程指南(PDG)

    《Java安全性编程指南》是一本深入探讨如何在Java平台上实现安全编程的重要著作。该书针对的是那些希望构建安全、可靠的Java应用程序的开发者。在Java语言中,安全性是至关重要的,因为它的跨平台特性使得它成为了...

    java安全

    本文将深入探讨Java安全机制,主要包括Java安全模型、权限管理、加密技术以及相关的工具使用。 首先,Java安全模型是Java平台的核心组成部分,它提供了一种沙箱环境,限制了代码(特别是来自不可信来源的网络代码)...

    Java的安全机制研究与分析

    本文基于给定的文件信息,深入探讨Java安全机制的关键组成部分及其运作原理。 ### Java安全机制的体系结构 Java安全架构的核心在于其设计时就充分考虑了安全因素,而不是后期添加的。这一设计思路主要体现在以下三...

    Java安全手册

    《Java安全手册》是一本专注于Java编程语言在安全领域的深度指南。这本手册详细阐述了如何在开发Java应用时确保代码的安全性,防止各种类型的攻击,包括但不限于注入攻击、跨站脚本攻击(XSS)、跨站请求伪造(CSRF...

    Java安全漫谈 - 01.反射篇(1)1

    Java 反射机制安全漫谈 Java 反射机制是 Java 语言中的一种强大功能,允许程序在运行时访问和修改类的信息。然而,这种功能也引入了安全隐患。本文将讨论 Java 反射机制的安全问题,重点介绍反射机制的基本概念、...

    Java安全性编程指南源代码

    总的来说,这份“Java安全性编程指南源代码”资源涵盖了Java安全编程的核心概念和技术,对于学习和实践Java安全编程有着极大的帮助。通过深入研究源代码,开发者可以更好地理解和应用这些安全机制,提高应用程序的...

    java毕业设计——基于java的安全电子商务系统的的设计与实现.zip

    java毕业设计——基于java的安全电子商务系统的的设计与实现.zip java毕业设计——基于java的安全电子商务系统的的设计与实现.zip java毕业设计——基于java的安全电子商务系统的的设计与实现.zip java毕业设计——...

Global site tag (gtag.js) - Google Analytics