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

数字签名Java实现小记

    博客分类:
  • java
阅读更多
一个证书发放单位给的证书里面包括一个发送单位的公钥,当前用户的一个私钥,公钥可用 Certificate certificate = getCertificate(certificatePath);            PublicKey key = certificate.getPublicKey();    的方法直接获取。私钥需要提交读取密钥库用到的读取密钥和alias名称,KeyStore ks = getKeyStore(keyStorePath, alias, password);            PrivateKey key = (PrivateKey) ks.getKey(alias, password.toCharArray());   
以上是单向认证的机制实现
//做签名
  public static String sign(String dataString){
//merPriKeyPath安全证书的文件路径
 File f = new File(merPriKeyPath);
 kb = new byte[(int)f.length()];
 fis = new FileInputStream(f);
 fis.read(kb);


  PKCS8EncodedKeySpec peks = null;
  KeyFactory kf = null;
  java.security.PrivateKey pk = null;
  peks = new PKCS8EncodedKeySpec(kb);
  kf = KeyFactory.getInstance("RSA");
  pk = kf.generatePrivate(peks);//获取私钥

  byte sb[] = (byte[])null;
  sig = Signature.getInstance("SHA1withRSA");
  sig.initSign(pk);
  sig.update(dataString.getBytes("gb2312"));
  sb = sig.sign();

 
  BASE64Encoder base64 = new BASE64Encoder();
  String     b64Str = base64.encode(sb);

  BufferedReader br = new BufferedReader(new StringReader(b64Str));
  String tmpStr = "";
  String tmpStr1;
  for(tmpStr1 = ""; (tmpStr = br.readLine()) != null; tmpStr1 = tmpStr1 + tmpStr);
  b64Str = tmpStr1;
  return b64Str;

}


//dataString被签名数据,signString签名结果(base64编码)
  public static boolean verify(String dataString, String signString){
        //读取数字证书文件
        String platCertPath="数字证书路径";
        FileInputStream fis;
        File f = new File(platCertPath);
        cb = new byte[(int)f.length()];
        fis = new FileInputStream(f);
        fis.read(cb);
//使用数字证书
        ByteArrayInputStream bais = new ByteArrayInputStream(cb);
        CertificateFactory cf = null;
        X509Certificate cert = null;

        cf = CertificateFactory.getInstance("X.509");
        cert = (X509Certificate)cf.generateCertificate(bais);// 取公钥匙对象?
//验证数字签名
              BASE64Decoder base64 = new BASE64Decoder();//对签名进行DASE64编码还原
            byte signed[] = base64.decodeBuffer(signString);
            Signature sig = Signature.getInstance("SHA1withRSA");
            sig.initVerify(cert);
            sig.update(dataString.getBytes());
            return sig.verify(signed);

}




http://crazier9527.iteye.com/blog/396012
分享到:
评论

相关推荐

    java小记.rar

    这份"java小记.rar"压缩包很可能包含了作者多年从事Java Web开发的经验总结,可能包括代码示例、笔记、最佳实践等内容。 在Java Web开发中,Servlet是核心部分,它是一个Java类,用于扩展服务器的功能,处理HTTP...

    Java transient关键字使用小记

    在Java编程语言中,`transient`关键字是一个非常重要的概念,它与对象的序列化过程紧密相关。序列化是将一个对象的状态转换为字节流,以便存储或在网络中传输。当一个类实现了`Serializable`接口,该类的对象就可以...

    java 中时间和日期处理的小记

    时间和日期中常用到的几个类: java.util.Date, java.util.Calendar, java.util.GregorainCalendar, java.text.DateFormat, java.text.SimpleDateFormat

    linux+java+python3+numpy+stl的3d打印小记

    在本项目中,我们将探索如何利用Linux操作系统,Java编程语言,Python3,NumPy库以及STL文件格式来实现3D打印技术。这是一个跨学科的综合应用,涉及到计算机科学、软件开发以及制造技术。 首先,Linux是开源的操作...

    Jquery AutoComplete组件+Ajax实现搜索框输入提示功能小记

    ### Jquery AutoComplete组件+Ajax实现搜索框输入提示功能详解 #### 前言 在当前Web应用开发中,提供良好的用户体验是至关重要的。本文主要介绍如何使用Jquery AutoComplete组件与Ajax技术来实现搜索框的实时输入...

    android开发小记

    在“android开发小记”这个主题中,我们可以深入探讨Android应用程序开发的相关知识,特别是通过查看提供的压缩文件中的代码示例。这些文件名如lesson_8_code.zip至lesson_20_codel.zip,以及不同的Mp3Player版本,...

    C++编程小记,经典收藏

    - **适用范围**:适用于C风格数组、初始化列表以及任何实现了非成员`begin()`和`end()`函数的类型。 #### 五、Override 和 Final 关键字 - **设计背景**:在C++中,虚函数的覆盖常常依赖于程序员的自觉性,没有...

    【咬人草小记,阅读附答案】 咬人草小记阅读答案.docx

    这篇文章《咬人草小记》便是对这种植物的描述,以及作者与它亲密接触后的体验与思考。 文章的开始,是一段友人的警告:“这草,你可不能碰!”正是这句话,将作者的注意力引向了这种奇特的生物。咬人草的外表并...

    xstream使用小记

    《Xstream使用小记》 Xstream是一款Java库,它提供了简单且强大的方式来序列化和反序列化Java对象到XML,以及从XML回转换为Java对象。在本文中,我们将深入探讨Xstream的核心概念、使用场景以及如何通过实例进行...

    Linux boost库安装、编译问题小记

    环境: Linux s12084 2.6.9-67.ELsmp #1 SMP Wed ...小记一下。以备以后参考。  boost 库做得真好。在windows 平台, linux 平台下编译都很顺利。hp aCC 也宣称对 boost 1.35 完全支持 。  全部编译是很痛苦的过程

    随笔小记.doc

    随笔小记.doc

    android应用登录模块访问mysql数据库小记.pdf

    为了实现这一目标,他深入学习了Java相关的服务器技术,包括Servlet和JSP。 Servlet是运行在服务器端的Java程序,用于响应来自客户端的HTTP请求。它提供了比CGI更强大的功能,每个请求都会启动一个新的线程来处理。...

    Flex整合J2EE开发小记+源码下载

    【标题】"Flex整合J2EE开发小记+源码下载"揭示了本文将探讨如何在Java企业级环境中(J2EE)集成Adobe Flex技术,用于构建富互联网应用程序(RIA)。Flex是一种强大的客户端开发框架,它允许开发人员创建交互性强、...

    Hessian 的字段序列化小记

    本文将围绕"Hessian的字段序列化小记"这一主题,深入探讨Hessian的工作原理、序列化过程以及其在实际应用中的价值。 Hessian的目标是通过减少数据传输的体积来提高网络通信的效率。相比于XML和JSON等文本格式,...

    GeoStudio学习小记.pdf

    GeoStudio学习小记

    spring 小记

    这篇小记将深入探讨Spring的主要组件和关键特性,带你一步步走进Spring的世界。 首先,我们要理解Spring的核心——依赖注入。在传统的Java程序中,对象之间的依赖关系通常是硬编码的,这使得代码难以测试和维护。...

    Thrift小记

    例如,对于Java,使用thrift命令行工具可以生成Java服务端和客户端的接口及实现类: ```bash thrift -gen java your_service.thrift ``` 生成的代码包括`your_service.java`(服务接口)、`your_service$Iface....

    数据结构习题总结 拾荒小记

    《数据结构习题总结 拾荒小记》是一份以C++语言实现的数据结构算法集,涵盖了严蔚敏教授经典教材中的80%算法。这份资料旨在帮助学习者巩固和深化对数据结构的理解,同时也为社区提供了一份宝贵的资源。 首先,让...

Global site tag (gtag.js) - Google Analytics