最近初步接触了下Java加密和数字签名的相关内容,我学习的过程大概分五步:
1)消息摘要
2)私钥加密
3)公钥加密
4)数字签名
5)数字证书
下面的代码是第四部分:数字签名
希望能为刚刚接触这个的朋友们省点事
package security;
import java.security.Signature;
import java.security.KeyPairGenerator;
import java.security.KeyPair;
import java.security.SignatureException;
/**
* 此例子是数字签名的例子,使用RSA私钥对消息摘要(这里指的是原始数据)进行签名,然后使用公钥验证签名
*
* A通过使用B的公钥加密数据后发给B,B利用B的私钥解密就得到了需要的数据(进过B公钥加密的数据只有B的私钥能够
* 解开,C没有B的私钥,所以C解不开,但C可以使用B的公钥加密一份数据发给B,这样一来,问题来了,B收到的数据到
* 底是A发过来的还是C发过来的呢)
* 由于私钥是唯一的,那么A就可以利用A自己的私钥进行加密,然后B再利用A的公钥来解密,就可以确定:一定是A的消
* 息,数字签名的原理就基于此
*
* 总结:A想将目标数据传给B,此时A需要准备1和2两部分
* 1:A使用B的公钥将原始信息加密,以起到保密作用(只有B的私钥能解开,其他人使用其他钥匙都解不开,当然就保密咯)
* 2:A使用A的私钥将原始信息的摘要进行签名,以起到接收方B确定是A发过来的作用(A用A的私钥对目标数据的摘要进行签
* 名,然后传给B,同时,C用C的私钥对任意信息进行签名也传给B,B想接受的是A的数据(比如说一个转帐请求),于是B
* 就通过A的公钥对接受到的两个信息进行解密,解开的就是A(A的公钥能且只能解开A的私钥加密的数据))
*/
public class DigitalSignature {
public static void main(String[] args) throws Exception {
String before = "asdf";
byte[] plainText = before.getBytes("UTF8");
//形成RSA公钥对
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(1024);
KeyPair key = keyGen.generateKeyPair();
//使用私钥签名**********************************************************
Signature sig = Signature.getInstance("SHA1WithRSA");
sig.initSign(key.getPrivate());//sig对象得到私钥
//签名对象得到原始数据
sig.update(plainText);//sig对象得到原始数据(现实中用的是原始数据的摘要,摘要的是单向的,即摘要算法后无法解密)
byte[] signature = sig.sign();//sig对象用私钥对原始数据进行签名,签名后得到签名signature
// System.out.println(sig.getProvider().getInfo());
String after1 = new String(signature, "UTF8");
System.out.println("\n用私钥签名后:"+after1);
//使用公钥验证**********************************************************
sig.initVerify(key.getPublic());//sig对象得到公钥
//签名对象得到原始信息
sig.update(plainText);//sig对象得到原始数据(现实中是摘要)
try {
if (sig.verify(signature)) {//sig对象用公钥解密签名signature得到原始数据(即摘要),一致则true
System.out.println("签名验证正确!!");
} else {
System.out.println("签名验证失败!!");
}
} catch (SignatureException e) {
System.out.println("签名验证失败!!");
}
}
}
分享到:
相关推荐
通过阅读"Java加密和数字签名编程快速入门",无论是初学者还是有一定经验的开发者,都能掌握Java中加密和数字签名的基本原理和实际应用。"www.pudn.com.txt"可能是提供额外链接或资源的文本文件,而"Java加密和数字...
Java加密和数字签名编程是Java开发中的重要领域,主要用于数据安全和身份验证。在这个快速入门教程中,我们将探讨Java如何实现这些功能,并提供基础实践。 一、Java加密 1. 密码学基础:了解对称加密(如AES)和非...
Java加密和数字签名编程是信息安全领域中的重要技术,它们在软件开发中扮演着不可或缺的角色,尤其是在保护数据安全、验证信息完整性和确保身份真实性方面。在Java中,这些功能主要通过Java Cryptography ...
Java加密和数字签名是网络安全领域中的重要概念,用于保护数据的完整性和确保信息发送者的身份。在Java中,这些功能主要由Java Cryptography Architecture (JCA) 和 Java Cryptography Extension (JCE) 提供。本篇...
Java 加密和数字签名编程快速入门 Java 加密和数字签名编程快速入门是指在 Java 中实现加密和数字签名的技术。加密是保护数据机密性的方式,而数字签名是确保消息完整性的技术。 消息摘要 消息摘要是密码学中的一...
java通信安全主要包括:md5 密码加密与验证 对称加密与解密 非对称加密以解密 基于MD5信息摘要算法实现密码加密与验证 凯撒加密算法 数字签名与验证 消息验证码 消息摘要 所有程序都经过了测试
Java加密解密和数字签名完整代码示例 本资源主要介绍了Java加密解密和数字签名完整代码示例,涉及到多种加密算法和数字签名算法的应用,具有很高的参考价值。 一、加密算法 加密算法是指通过各种数学算法和技术来...
博文链接:https://huntersxp.iteye.com/blog/177701
Java加密和数字签名是网络安全领域中的重要概念,用于保护数据的隐私和完整性。在Java中,这些技术得到了广泛的应用和支持。 1. **消息摘要**: 消息摘要是一种单向散列函数,用于生成消息的固定长度表示,通常...
非对称加密算法和数字签名是信息技术中两个关键...总之,非对称加密算法和数字签名是保障网络通信安全的重要工具,Java提供了丰富的库支持这些功能的实现。理解并熟练运用这些技术,对于开发安全的应用和系统至关重要。
java关于加密的算法demo代码(Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法) JAVA安全实现三种方式: 1.JDK 2.Commons Codec 3.Bouncy Castle 一。非对称加密算法: 1.DH 2.RSA 3.ELGamal 二。...
下面将详细介绍这些算法以及它们在Java中的实现,以及如何进行数字签名和数字证书的验证。 1. **SM2算法**:SM2是一种基于椭圆曲线密码学(ECC)的公钥加密算法,用于非对称加密。它提供了密钥交换、签名和验证的...
### Java 环境下IDEA加密算法及数字签名编程详解 #### 一、加密的必要性和可探究性 随着互联网技术的飞速发展,尤其是电子商务和电子政务的普及,安全加密技术的应用变得越来越广泛。在这样的背景下,对加密技术的...
总结起来,Java提供了丰富的加密和数字签名功能,包括消息摘要、私钥加密、公钥加密以及数字签名。这些技术在保护数据安全、确保消息完整性和验证发送者身份等方面发挥着重要作用。开发者可以根据具体需求选择合适的...
总的来说,这个Java数字签名源程序是一个学习和实践密码学概念的实用工具,特别是对于那些希望深入理解公钥加密和数字签名在网络安全中的应用的人来说。通过这个程序,开发者能够掌握如何在Java环境中实现这些安全...