宁静第16讲——数字签名

产品时间:2022-08-13 01:00

简要描述:

1、宁静服务的类型在ISO 7498-2:1989文档中,界说了宁静服务的类型,宁静服务包罗五种类型:判别(Authentication):保证通信的真实性;会见控制(Access Control):防止网络资源被非授权地会见;数据保密性(Data Confidentiality):对数据举行加密;数据完整性(Data Integrity):防止数据被窜改或重放;不行否认性(No-repudiation):防止发送方狡辩所传输的信息。...

推荐产品
详细介绍
本文摘要:1、宁静服务的类型在ISO 7498-2:1989文档中,界说了宁静服务的类型,宁静服务包罗五种类型:判别(Authentication):保证通信的真实性;会见控制(Access Control):防止网络资源被非授权地会见;数据保密性(Data Confidentiality):对数据举行加密;数据完整性(Data Integrity):防止数据被窜改或重放;不行否认性(No-repudiation):防止发送方狡辩所传输的信息。

爱游戏app官网入口

1、宁静服务的类型在ISO 7498-2:1989文档中,界说了宁静服务的类型,宁静服务包罗五种类型:判别(Authentication):保证通信的真实性;会见控制(Access Control):防止网络资源被非授权地会见;数据保密性(Data Confidentiality):对数据举行加密;数据完整性(Data Integrity):防止数据被窜改或重放;不行否认性(No-repudiation):防止发送方狡辩所传输的信息。使用百度,可以轻松获得ISO 7498-2:1989文档,感兴趣的朋侪可以自己学习。2、数字签名的观点签名这个词,我们日常生活中使用得比力多,一份文件、票据或条约,我们如果认可其中的条款,就可以签署我们的名字。

一般情况下,差别的人字迹差别,通过签名可以防止签署人否认所签署的内容。数字签名的英文是Digital Signature。数字签名,就是只有信息发送刚刚能发生的、别人无法伪造的数字串。数字签名需要实现判别(认证数据泉源)、数据完整性、不行否认性三项宁静服务。

3、数字签名的原理如果我们是宁静专家,要实现判别、数据完整性、不行否认这三项服务,我们可以这样来设计数字签名:(1)使用消息摘要算法实现数据完整性;(2)使用提供了公钥和私钥的算法,实现判别和不行否认两项服务。实际上,数字签名也是这样实现的,下面就是数字签名的实现机制:简朴地说,数字签名,其实就是支持公钥和私钥的消息摘要算法。此外,上图只是形貌了数字签名算法自己的实现。

实际商用中,为了保证发送中的数据内容不被其他人获取到,甲方在发送数据前,会使用乙方的公钥对发送的数据加密,乙方收到数据后会首先用自己的私钥对加密数据举行解密。4、常用的数字签名算法业界比力常用的数字签名算法有三种:RSA、DSA、ECDSA。RSA前面解说过,是一种非对称加密算法。其实RSA也可以用作数字签名算法。

DSA算法是在RSA之后提出的数字签名算法,和RSA相比,DSA只能用于数字签名,不能用于数据的加密息争密。ECDSA算规则是ECC算法和DSA算法的联合,相比来说,它有盘算快、强度高、签名短的优点。5、使用Java语言实现数字签名功效5.1 JDK和Bouncy Castle提供的数字签名算法在JDK中,提供了下面的签名算法:MD2WithRSAMD5WithRSASHA1WithRSASHA1WithDSA在Bouncy Castle中还提供了下面的签名算法:SHA224WithRSASHA256WithRSASHA384WithRSASHA512WithRSASHA224WithDSASHA256WithDSASHA384WithDSASHA512WithDSASHA1WithECDSASHA224WithECDSASHA256WithECDSASHA384WithECDSASHA512WithECDSA这些算法,从名称就可以看出数字签名算法是RSA、DSA还是ECDSA,以及数字签名算法基于的消息摘要算法。

下面我们使用JDK提供的MD5WithRSA算法,编写一个实验法式。5.2 使用IDEA建设project_ds工程,然后在project_ds工程下建设digital_signature模块:5.3 建立一个Sender类建立Sender类的工具实例时,提供原始数据信息和私钥,Sender工具则生成签名。Sender类的代码如下:package com.flying.digital_signature;import java.security.KeyFactory;import java.security.PrivateKey;import java.security.Signature;import java.security.interfaces.RSAPrivateKey;import java.security.spec.PKCS8EncodedKeySpec;import java.util.Base64;public class Sender { private RSAPrivateKey rsaPrivateKey; private byte[] originBytes; public Sender(RSAPrivateKey rsaPrivateKey, byte[] originBytes){ this.rsaPrivateKey = rsaPrivateKey; this.originBytes = originBytes; } public byte[] getSignature(){ byte[] signatureBytes = null; try { PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded()); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec); Signature signature = Signature.getInstance("MD5WithRSA"); signature.initSign(privateKey); signature.update(originBytes); signatureBytes = signature.sign(); System.out.println("digital signature is : " + Base64.getEncoder().encodeToString(signatureBytes)); }catch (Exception ex){ ex.printStackTrace(); } return signatureBytes; }}5.4 建立一个Receiver类建立Receiver类的工具实例时,提供原始数据信息、公钥和签名,Receiver工具则验证签名。

Receiver类的代码如下:package com.flying.digital_signature;import java.security.KeyFactory;import java.security.PublicKey;import java.security.Signature;import java.security.interfaces.RSAPublicKey;import java.security.spec.X509EncodedKeySpec;public class Receiver { private RSAPublicKey rsaPublicKey; private byte[] originalBytes; private byte[] signatureBytes; public Receiver(RSAPublicKey rsaPublicKey, byte[] originalBytes, byte[] signatureBytes){ this.rsaPublicKey = rsaPublicKey; this.originalBytes = originalBytes; this.signatureBytes = signatureBytes; } public void checkSignature(){ try { X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded()); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec); Signature signature = Signature.getInstance("MD5WithRSA"); signature.initVerify(publicKey); signature.update(originalBytes); System.out.println("Signature verify result: " + signature.verify(signatureBytes)); }catch (Exception ex){ ex.printStackTrace(); } }}5.5 修改main方法在main方法中生成公钥、私钥和原始数据信息,并挪用Sender和Receiver类的功效来测试数字签名。main方法在DigitalSignatureApplication类中界说,DigitalSignatureApplication类的代码如下:package com.flying.digital_signature;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.interfaces.RSAPrivateKey;import java.security.interfaces.RSAPublicKey;import java.util.Base64;@SpringBootApplicationpublic class DigitalSignatureApplication { public static void main(String[] args) { SpringApplication.run(DigitalSignatureApplication.class, args); try { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(512); KeyPair keyPair = keyPairGenerator.generateKeyPair(); RSAPublicKey rsaPublicKey = (RSAPublicKey)keyPair.getPublic(); RSAPrivateKey rsaPrivateKey = (RSAPrivateKey)keyPair.getPrivate(); byte[] originBytes = "abcdefghi".getBytes(); System.out.println("RSA public key is : " + Base64.getEncoder().encodeToString(rsaPublicKey.getEncoded())); System.out.println("RSA private key is : " + Base64.getEncoder().encodeToString(rsaPrivateKey.getEncoded())); System.out.println("Original bytes is : " + Base64.getEncoder().encodeToString(originBytes)); Sender sender = new Sender(rsaPrivateKey, originBytes); byte[] signatureBytes = sender.getSignature(); Receiver receiver = new Receiver(rsaPublicKey, originBytes, signatureBytes); receiver.checkSignature(); }catch (Exception ex){ ex.printStackTrace(); } }}5.6 这是法式某次运行的效果RSA public key is : MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKB2iMFgDsOjPVi86JLkJaNxjQWinPU4ZOSqjtxUQWKtTo2ckNvi9gVmEQTYLinkjJ+VkD30r2QSM3YeML5jjbUCAwEAAQ==RSA private key is : MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEAoHaIwWAOw6M9WLzokuQlo3GNBaKc9Thk5KqO3FRBYq1OjZyQ2+L2BWYRBNguKeSMn5WQPfSvZBIzdh4wvmONtQIDAQABAkBJZ3AP5f1bCaXanjBWYf/F0QAN/+GFXBLreAp6SCDRHnM6cJoKA1un87Wijr3MIFylWgNtSWcGBj8gxE6pmLSBAiEA61s0c7UfV1GRjQ7Txb0GrUBssT8cBnDXs6Jgd4NFBekCIQCuiaSQ6xTc8NaenhigE0G9B7tB6uRfc3lNdI2Iv0ZN7QIhAIMye2HI5KizUrTUQB8piTBJCo4fxQqeGtALQ0U8Ct0JAiEAgA9DrISfUSBwB/9th/25DQ3gKhRDLXmXNepfckcNOV0CIQDT5OHxJU+6yhViiqdoazEP63cIsg4NuunJrBRytwIEsA==Original bytes is : YWJjZGVmZ2hpdigital signature is : Ir1PMMzSEeYq7qgH9KtClBRVPifKxSq9cdYSrL+GX6ztwJztY0t5GCnAo7pHg+GOQdSnHoXXXeZEv4FxK2BMEA==Signature verify result: true可以看到,法式运行乐成。整个法式只有三个类,上面的代码是完整的,如果你感兴趣,可以自己在电脑上调试运行。


本文关键词:爱游戏app体育官方下载,宁静,第,讲,—,数字签名,、,宁静,服务,的

本文来源:爱游戏app官方下载-www.chuangshenkj.com

产品咨询

留言框

  • 产品:

  • 您的单位:

  • 您的姓名:

  • 联系电话:

  • 详细地址:

  • 留言内容:

在线客服 联系方式 二维码

电话

0187-931828576

扫一扫,关注我们