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;
}
}
分享到:
相关推荐
Java安全是指在Java编程和应用开发过程中采取的一系列措施,旨在保护Java应用程序、系统和数据免受恶意攻击、数据泄露和其他安全威胁的影响。Java安全主要涉及以下几个方面: 代码安全性:Java提供了强大的安全机制...
资源名称:Java安全编码标准内容简介:《java安全编码标准》是java安全编码领域最权威、最全面、最详细的著作,java之父james a. gosling推荐。不仅从语言角度系统而详细地阐述java安全编码的要素、标准、规范和最佳...
Java的安全开发技术规范以及安全开发注意要点
可以将本书作为java安全方面的工具书,根据自己的需要,找到自己感兴趣的规则进行阅读和理解,或者在实际开发中遇到安全问题时,根据书中列出的大致分类对规则进行索引和阅读,也可以通读全书的所有规则,系统地了解...
Java安全编程指南旨在帮助开发者在使用Java编程时遵循最佳的安全实践,以保护应用程序免受潜在威胁。Java作为一种跨平台的编程语言,其安全性是其核心特性之一,但如果不正确地编写代码,可能会引入安全隐患。本指南...
Java安全性编程实例主要涵盖的是Java平台上的安全机制和实践,这对于任何希望构建可靠、安全的Java应用程序的开发者来说都是至关重要的。Java作为一种跨平台的编程语言,其安全性是其核心特性之一,它提供了多种机制...
以下是一些核心的Java安全编程原则和知识点: 1. 类加载器与访问控制:理解Java的类加载机制对于安全至关重要。类加载器负责加载类到JVM中,并通过权限检查防止未经授权的类访问敏感资源。 2. 访问修饰符:合理...
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安全编码培训是针对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应用时确保代码的安全性,防止各种类型的攻击,包括但不限于注入攻击、跨站脚本攻击(XSS)、跨站请求伪造(CSRF...
Java 反射机制安全漫谈 Java 反射机制是 Java 语言中的一种强大功能,允许程序在运行时访问和修改类的信息。然而,这种功能也引入了安全隐患。本文将讨论 Java 反射机制的安全问题,重点介绍反射机制的基本概念、...
总的来说,这份“Java安全性编程指南源代码”资源涵盖了Java安全编程的核心概念和技术,对于学习和实践Java安全编程有着极大的帮助。通过深入研究源代码,开发者可以更好地理解和应用这些安全机制,提高应用程序的...