`
wangxuliangboy
  • 浏览: 210670 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

数字签名校验

阅读更多

//特定于算法的,用于生成公钥和私钥对 

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA");
 keyGen.initialize(1024);
 KeyPair key = keyGen.generateKeyPair();

 

// 将生成的密钥对序列化到文件

 byte[] buffer = key.getPrivate().getEncoded();
         buffer = Base64.encodeBase64(buffer);
         FileOutputStream out = new FileOutputStream("d:/private_test");
         out.write(buffer);
         out.close();

 out = new FileOutputStream("d:/public_test");
         buffer = key.getPublic().getEncoded();
         buffer = Base64.encodeBase64(buffer);
         out.write(buffer);
         out.close();

 

 

数字签名的验证:

byte[] encodestr = str.getBytes();

//为应用程序提供数字签名算法功能,数字签名用来保证数字数据的真实性和完整性

在所有算法当中,数字签名可以是 NIST 标准的 DSA,它使用 DSA 和 SHA-1。可以将使用 SHA-1 消息摘要算法的 DSA 算法可指定为 SHA1withDSA。如果使用 RSA,对消息摘要算法将有多种选择,因此,可以将签名算法指定为 MD2withRSAMD5withRSASHA1withRSA。没有默认的算法名称,所以必须为其指定名称。 

Signature 对象签名数据或验证签名包括以下三个阶段:

  1. 初始化,使用
    • 初始化验证签名的公钥(请参见 initVerify),或使用
    • 初始化签署签名的私钥(也可以选择“安全随机数生成器")
  2.  

    根据初始化类型,这可更新要签名或验证的字节。 

  3. 签署或验证所有更新字节的签名。   

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

//初始化此用于签名的对象       

 sig.initSign(readPrivateKey("D:/private_test"));

//更新要由字节签名或验证的数据
        sig.update(encodestr);

//返回所有已更新数据的签名字节。
        byte[] signature = sig.sign();

 

//  初始化此用于验证的对象。

        sig.initVerify(readPublicKey("d:/public_test"));

      sig.update(encodestr);

//验证传入的签名

      System.out.println(sig.verify(signature));  

 

//读取文件,生成privateKey(使用密钥工厂以便根据其编码实例化 DSA 私钥)

  public static PrivateKey readPrivateKey(String filePath) throws Exception {

//密钥工厂       

 KeyFactory keyFactory = KeyFactory.getInstance("DSA");
        FileInputStream istream = new FileInputStream(filePath);
        byte[] buffer = new byte[istream.available()];
        istream.read(buffer);
        buffer = Base64.decodeBase64(buffer);

//对于Private key是用PKCS#8编码
        EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(buffer);

// 根据所提供的密钥规范(密钥材料)生成私钥对象。       

return keyFactory.generatePrivate(keySpec);
    }

 

//生成publicKey

 public static PublicKey readPublicKey(String filePath) throws Exception {
        KeyFactory keyFactory = KeyFactory.getInstance("DSA");
        FileInputStream istream = new FileInputStream(filePath);
        byte[] buffer = new byte[istream.available()];
        istream.read(buffer);
        buffer = Base64.decodeBase64(buffer);

// public key是用X.509编码
        EncodedKeySpec keySpec = new X509EncodedKeySpec(buffer);

        return keyFactory.generatePublic(keySpec);
    }

 

 

分享到:
评论
1 楼 dudujava 2009-03-16  
这篇对我很有用,,哎代码啊。。先copy过来,修修改改就好了。。

相关推荐

    MD5,SHA1,CRC32数字签名校验工具

    例如,“MD5,SHA1,CRC32数字签名校验工具”就提供了这种服务,一次性计算并展示三种校验和,便于全面验证文件的完整性。 总的来说,这些校验和算法和对应的工具在软件下载、备份恢复、数据交换等多个场景中都有重要...

    delphi 数字签名校验

    delphi数字签名验证及能够获取数字签名文件信息。

    用API验证数字签名

    在IT领域,数字签名是一种确保数据完整性和来源可靠性的安全技术。它主要用于验证软件或文档的作者身份,防止篡改。本话题将深入探讨如何利用API来验证数字签名,特别是针对Delphi开发环境中的`WinVerifyTrust` API...

    RSA数字签名源代码

    在C#编程环境中,我们可以利用.NET框架提供的类库来实现RSA算法的各种功能,包括数字签名。 数字签名是一种用于验证数据完整性和发送者身份的技术,它是通过将哈希函数和非对称加密相结合来实现的。在RSA数字签名中...

    jsp数字签名系统

    【标题】"jsp数字签名系统"是一个基于JavaServer Pages(JSP)技术构建的应用程序,其核心功能是实现数字签名的生成与验证。在信息安全领域,数字签名是一种用于确保数据完整性和发送者身份验证的技术,它结合了非...

    C++编写的rsa数字签名程序源代码

    **C++实现RSA数字签名程序源代码解析** RSA(Rivest–Shamir–Adleman)是一种非对称加密算法,广泛应用于数字签名、数据加密等领域。它基于大整数因子分解的困难性,提供了安全的数据传输和验证机制。在C++中实现...

    SDK互联网域名签名校验Maven版源码

    SDK互联网域名签名校验Maven版源码是一个用于互联网单点登录(SSO)系统中的关键组件,主要涉及域名校验、签名以及加密等安全技术。这个SDK是开发者自行设计和实现的,目的是为了提高SSO系统中身份验证的安全性和...

    验证exe文件数字签名

    验证exe文件数字签名,使用API。很简单的DEMO。

    计算机课程设计rsa数字签名实现

    同时,也会涉及到数字签名的应用场景,如电子邮件安全、文件完整性校验等。通过实际操作,你可以更深入地理解非对称加密机制以及数字签名在保障信息安全方面的重要作用。 总的来说,RSA数字签名的实现涉及到数论、...

    rsa签名校验工具

    在实际应用中,RAS签名不仅用于支付验证,也广泛应用于电子邮件加密、软件数字签名以及HTTPS等网络安全场景。理解并正确使用RSA签名校验工具是确保在线交易安全的关键环节,对于开发者和企业来说,这样的工具无疑...

    Android签名证书文件的解析和签名校验的加强

    ### Android签名证书文件的解析与签名校验加强 #### 一、Android签名机制概述 Android平台为了确保应用的安全性和来源的可信度,采用了一套严格的签名机制。这一机制确保了只有经过签名的应用程序(APK)才能够在...

    软件数字签名检查工具

    可是准确的校验出一个软件包是否具有数字签名,以及是否有效,如果签名存在,会显示详细信息。在Windows下查看一些软件包的签名的时候要么特别慢,要么会卡住,有的时候是显示不出来的,这个工具可以解决这些问题。

    win7 64位需要数字签名解决方法.rar

    数字签名是一种加密技术,它通过哈希算法对驱动程序进行校验,确保驱动程序未被篡改,同时也能验证驱动程序的来源。在Windows 7 64位系统中,微软强制要求驱动程序必须带有有效的数字签名,以防止恶意软件利用驱动...

    Elgamal数字签名

    通过Java代码实现Elgamal数字签名,可以加深对这一重要加密机制的理解,并应用于实际项目中,如数据传输、文件完整性校验等。在"ElgamalSignature"文件中,可能包含了具体的Java代码示例,可以帮助开发者更好地学习...

    java 国密算法实现包含SM2 SM3 SM4和数字签名、数字证书的验证

    下面将详细介绍这些算法以及它们在Java中的实现,以及如何进行数字签名和数字证书的验证。 1. **SM2算法**:SM2是一种基于椭圆曲线密码学(ECC)的公钥加密算法,用于非对称加密。它提供了密钥交换、签名和验证的...

    md5算法与数字签名

    ### MD5算法与数字签名 #### 一、引言 随着互联网技术的飞速发展,信息安全问题日益凸显,其中信息的完整性保护变得尤为重要。传统的加密技术、访问控制技术和认证技术等虽能有效防止未授权访问,但对于信息一旦被...

    易语言验证微软数字签名

    易语言验证微软数字签名源码,验证微软数字签名,CheckTrust,GetBinPtr,Bin2Hex,WideCharToMultiByte,CryptCATAdminAcquireContext,WinVerifyTrustX,CryptCATAdminReleaseCatalogContext,CryptCATAdminReleaseContext,...

    MD5数字签名算法课程设计

    MD5数字签名算法是信息安全领域中的一个重要概念,它在数据完整性验证、文件校验和等方面发挥着关键作用。本课程设计旨在深入理解并实践MD5算法的原理与应用。通过提供的源码,学生可以实现一个完整的MD5数字签名...

    基于编码的数字签名技术综述.pdf

    【编码的数字签名技术】 编码的数字签名技术是信息安全领域中的一个重要分支,它结合了编码理论和数字签名的概念,以提供更加安全的签名方案。这种技术最初由王新梅教授在1990年引入,随后发展出多种基于编码问题的...

    数字签名SHA算法的实现

    数字签名的应用过程是,数据源发送方使用自己的私钥对数据校验和或其他与数据内容有关的变量进行加密处理,完成对数据的合法“签名”,数据接收方则利用对方的公钥来解读收到的“数字签名”,并将解读结果用于对数据...

Global site tag (gtag.js) - Google Analytics