数字签名

原创 2006年05月27日 22:32:00

    数字签名,它是确定交换消息的通信方身份的第一个级别。上面A通过使用公钥加密数据后发给BB利用私钥解密就得到了需要的数据,问题来了,由于都是使用公钥加密,那么如何检验是A发过来的消息呢?上面也提到了一点,私钥是唯一的,那么A就可以利用A自己的私钥进行加密,然后B再利用A的公钥来解密,就可以了;数字签名的原理就基于此,而通常为了证明发送数据的真实性,通过利用消息摘要获得简短的消息内容,然后再利用私钥进行加密散列数据和消息一起发送。java中为数字签名提供了良好的支持,java.security.Signature类提供了消息签名:

/**

*DigitalSignature2Example.java

*Copyright 2005-2-16

*/

import java.security.Signature;

import java.security.KeyPairGenerator;

import java.security.KeyPair;

import java.security.SignatureException;

 

/**

*数字签名,使用RSA私钥对对消息摘要签名,然后使用公鈅验证 测试

*/

public class DigitalSignature2Example{

 public static void main(String[] args) throws Exception{

  if(args.length!=1){

   System.err.println("Usage:java DigitalSignature2Example <text>");

   System.exit(1);

  }

 

  byte[] plainText=args[0].getBytes("UTF8");

  //形成RSA公钥对

  System.out.println("/nStart generating RSA key");

  KeyPairGenerator keyGen=KeyPairGenerator.getInstance("RSA");

  keyGen.initialize(1024);

 

  KeyPair key=keyGen.generateKeyPair();

  System.out.println("Finish generating RSA key");

  //使用私鈅签名

  Signature sig=Signature.getInstance("SHA1WithRSA");

  sig.initSign(key.getPrivate());

  sig.update(plainText);

  byte[] signature=sig.sign();

  System.out.println(sig.getProvider().getInfo());

  System.out.println("/nSignature:");

  System.out.println(new String(signature,"UTF8"));

 

  //使用公鈅验证

  System.out.println("/nStart signature verification");

  sig.initVerify(key.getPublic());

  sig.update(plainText);

  try{

   if(sig.verify(signature)){

    System.out.println("Signature verified");

   }else System.out.println("Signature failed");

   }catch(SignatureException e){

    System.out.println("Signature failed");

   }

  }

}

 

数字签名与数字证书形象解释

前言 先看一下百度百科对数字签名和数字证书的解释: 数字签名: 将报文按双方约定的HASH算法计算得到一个固定位数的报文摘要。在数学上保证:只要改动报文中任何一位,重新计算出的报文摘要值就会...
  • liuweiyuxiang
  • liuweiyuxiang
  • 2016年10月07日 11:30
  • 839

数字签名基本概念

1. 概念:数字签名是一种以电子形式存在于数据信息之中的,或作为其附件或逻辑上有联系的数据,可用于辨别数据签署人的身份,并表名签署人对数据信息中包含的信息的认可技术 2. 一个完善的数字签名应该包含...
  • ShaoqunLiu
  • ShaoqunLiu
  • 2016年07月31日 21:21
  • 2107

如何将程序进行数字签名

1.制作私钥文件 2.制作数字证书 3.对程序进行签名认证            大家知道吗?微软发布的具有数字签名的SP2才是正式版本,这是怎么一回事呢?    一、Windows的文件保护功能  ...
  • FrankieWang008
  • FrankieWang008
  • 2013年08月21日 16:16
  • 9208

数字签名算法的实现

算法流程图:      实现类: RSA.java package com.rsa; import java.security.KeyFactory; import java.security...
  • linhaiyun_ytdx
  • linhaiyun_ytdx
  • 2017年06月16日 16:59
  • 277

获取数字签名

#include #include #include #include #include #include #include #include #pragma comment(lib...
  • qq125096885
  • qq125096885
  • 2017年03月17日 15:23
  • 425

使用SignTool对软件安装包进行数字签名

一、制作根证书   1、开始菜单—运行—输入cmd,弹出命令行窗体。     2、输入命令:cd /d F:\SignTool,将当前工作目录修改到SignTool路径下。     3、使用...
  • doris_d
  • doris_d
  • 2014年06月26日 14:19
  • 3282

数字签名的过程

数字签名的全过程分两大部分,即签名与验证。左侧为签名,右侧为验证过程。即发方将原文用哈希算法求得数字摘要,用签名私钥对数字摘要加密得数字签名,发方将原文与数字签名一起发送给接受方;收方验证签名,即用发...
  • zh521zh
  • zh521zh
  • 2016年07月04日 12:02
  • 5223

没有验证对象的数字签名——解决方案

由于项目的需要,要安装一个VS2013,遇到“没有验证对象的数字签名”的问题,安装不了。经过不断的尝试终于找到解决方法。环境说明:系统:win7 x64 (Service Pack1,已打补丁到最新)...
  • luoweifu
  • luoweifu
  • 2016年01月04日 23:27
  • 25786

C#实现数字签名

C#实现数字签名   [csharp] view plaincopy using System;   using System.Collection...
  • gws1229
  • gws1229
  • 2013年12月06日 08:24
  • 2479

数字签名与数字证书技术简介(一)

数字签名、数字证书等技术,是现代信息安全的核心技术,可谓使用面十分广泛。其基本理论本身并不复杂,本文希望通过深入浅出的介绍,能够让大家有一些基本了解。   一、对称加密、非对称加密 让我们通过一个例子...
  • u014419512
  • u014419512
  • 2014年05月19日 23:54
  • 3855
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数字签名
举报原因:
原因补充:

(最多只允许输入30个字)