数字签名主要经过以下几个过程:
信息发送者使用一单向散列函数(HASH函数)对信息生成信息摘要;
信息发送者使用自己的私钥签名信息摘要;
信息发送者把信息本身和已签名的信息摘要一起发送出去;
信息接收者通过使用与信息发送者使用的同一个单向散列函数(HASH函数)对接收的信息本身生成新的信息摘要,再使用信息发送者的公钥对信息摘要进行验证,以确认信息发送者的身份和信息是否被修改过。
数字加密主要经过以下几个过程:
当信息发送者需要发送信息时,首先生成一个对称密钥,用该对称密钥加密要发送的报文;
信息发送者用信息接收者的公钥加密上述对称密钥;
信息发送者将第一步和第二步的结果结合在一起传给信息接收者,称为数字信封;
信息接收者使用自己的私钥解密被加密的对称密钥,再用此对称密钥解密被发送方加密的密文,得到真正的原文。
数字签名和数字加密的过程虽然都使用公开密钥体系,但实现的过程正好相反,使用的密钥对也不同。数字签名使用的是发送方的密钥对,发送方用自己的私有密钥进行加密,接收方用发送方的公开密钥进行解密,这是一个一对多的关系,任何拥有发送方公开密钥的人都可以验证数字签名的正确性。数字加密则使用的是接收方的密钥对,这是多对一的关系,任何知道接收方公开密钥的人都可以向接收方发送加密信息,只有唯一拥有接收方私有密钥的人才能对信息解密。另外,数字签名只采用了非对称密钥加密算法,它能保证发送信息的完整性、身份认证和不可否认性,而数字加密采用了对称密钥加密算法和非对称密钥加密算法相结合的方法,它能保证发送信息保密性。
Java中数字的签名
Signature instance = Signature.getInstance("SHA1withRSA"); //选择算法
instance.initSign(privateKey); //注意这里用的是私钥
instance.update(plainText.getBytes());
byte[] signature = instance.sign();
Java中的数字加密
非对称加密
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey); //注意这里是公钥
byte[] cipherBytes = cipher.doFinal(plainText.getBytes());
非对称解密
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey); //注意这里是公钥
byte[] plainBytes = cipher.doFinal(clipherBytes);
如果是对称的加密解密,那么Cipher的init方法的第二个参数都是一样的key,因为对称算法只有一个key,比如:
对称加密
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, key); //注意这里是公钥
byte[] cipherBytes = cipher.doFinal(plainText.getBytes());
对称解密
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, key); //注意这里是公钥
byte[] cipherBytes = cipher.doFinal(plainText.getBytes());
分享到:
相关推荐
数据加密与数字签名系统是信息安全领域中的核心技术,用于保护数据的隐私性和完整性,以及验证信息来源的可靠性。在本文中,我们将深入探讨这两个概念及其在C++编程中的应用。 首先,我们来理解数据加密。数据加密...
在IT领域,数字签名和加密技术是网络安全与数据保护的核心组成部分。它们对于确保信息的完整性和验证发送者身份至关重要。让我们深入探讨这两个概念及其在实际应用中的重要性。 首先,我们来理解“数字签名”。数字...
非对称加密算法和数字签名是信息技术中两个关键的安全概念,尤其在网络安全和数据保护方面起着至关重要的作用。在Java编程环境中,这些技术被广泛应用于实现安全通信、身份验证和数据完整性保护。 非对称加密算法,...
在信息安全领域,数字签名和加密是两种至关重要的技术,它们分别用于确保数据的完整性和机密性。这两种技术虽然在目的上有所重叠,但在实际应用中却有着明显的区别。 首先,我们来看数字签名的基本原理。数字签名的...
在探讨公钥私钥加密解密、数字证书以及数字签名之前,我们需要先理解几个核心概念。 **1. 密钥对:** - 在非对称加密技术中,存在两种密钥——私钥和公钥。私钥由密钥对的所有者持有且必须保密,而公钥则是由密钥...
在IT领域,加密、RSA数字签名以及数字证书是网络安全中至关重要的概念,它们共同构建了互联网上安全通信的基础。下面将详细阐述这些知识点,并结合"EncryptMethod"这一压缩包文件中的可能内容进行分析。 首先,加密...
Java作为一种广泛使用的编程语言,提供了丰富的加密和数字签名功能来确保数据的安全传输和存储。本教程将带你快速入门Java中的加密和数字签名编程。 首先,让我们了解什么是加密。加密是一种将明文数据转化为难以...
数字签名和加密邮件发送实验报告 本实验报告旨在介绍如何使用 Outlook Express 发送带数字签名和加密的电子邮件。实验中,我们将学习如何申请免费数字证书、设置 Outlook Express 收发邮件、发送带数字签名的邮件和...
java通信安全主要包括:md5 密码加密与验证 对称加密与解密 非对称加密以解密 基于MD5信息摘要算法实现密码加密与验证 凯撒加密算法 数字签名与验证 消息验证码 消息摘要 所有程序都经过了测试
数字签名是一种非对称加密的应用,用于验证数据的完整性和发送者的身份。发送者通过自己的私钥对消息的哈希值进行加密,接收者可以使用发送者的公钥来解密这个签名,如果解密后的哈希值与原始消息的哈希值一致,就...
数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。数字证书可以绑定公钥和公钥所属人,确保公钥的真实性和可靠性。例如,乙可以使用甲的数字证书来验证甲的公钥是否正确,从而确保...
java关于加密的算法demo代码(Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法) JAVA安全实现三种方式: 1.JDK 2.Commons Codec 3.Bouncy Castle 一。非对称加密算法: 1.DH 2.RSA 3.ELGamal 二。...
本文将深入探讨过期证书、过期数字签名的处理、强制签名工具以及数字签名证书的相关知识。 首先,我们要理解什么是代码签名数字证书。这是一种由权威的证书颁发机构(CA)颁发的证书,用于验证软件的开发者身份和...
不对称加密和数字签名是两种广泛使用的安全技术,它们为数据提供了强大的保护。本实例应用聚焦于如何在C#编程环境中实现这些技术。 不对称加密,也称为公钥加密,是一种基于两个密钥(公钥和私钥)的加密方法。公钥...
数字签名并不是我们日常生活中的手写签名,而是一种利用公钥加密技术来实现的数据验证机制。它通过哈希函数对原始数据进行加密,然后使用发送者的私钥进行签名。这个签名包含了两部分信息:一是数据的哈希值,二是...
在本文中,我们将深入探讨PGP的工作原理、数字签名的概念以及数字水印的应用。 首先,我们来理解PGP加密。PGP利用非对称加密技术,它包含一对密钥:公钥和私钥。任何人都可以获取你的公钥,但私钥必须严格保密。当...
在本课程设计中,我们将探讨如何使用C#编程语言实现文件的加密与解密功能,同时结合硬件信息的集成以及数字签名技术。这些是信息安全领域中的核心概念,对于保护数据安全至关重要。 首先,让我们深入了解C#中的加密...