获取java.security.Signature的哈希值;创建给定哈希的签名

时间:2014-03-19 12:40:08

标签: java security hash digital-signature

我使用java.security.Signature来签署数据。签名执行以下过程:

  1. 创建数据的哈希值
  2. 使用私钥加密
  3. 我想存储数据的哈希值,以便稍后重新签名内容而无需完整数据。我现在的问题是:

    1. 如何获取数据的哈希值?作为一种解决方法,我可以使用相同的哈希函数(SHA1,MD5,...)再次自己哈希。还有更好的方法吗?
    2. 如何创建给定哈希的签名,而不是创建数据本身的签名?
    3. 我知道this thread描述了Java如何签名,但接口没有提供所请求的功能。

      修改1

      当前使用的签名算法是带有DSA的SHA1。这是代码:

      Signature signature = Signature.getInstance("SHA1withDSA");
      signature.initSign(privateKey);
      ByteBuffer[] byteBuffers = buf.nioBuffers();
      int len = byteBuffers.length;
      for (int i = 0; i < len; i++) {
          ByteBuffer buffer = byteBuffers[i];
          signature.update(buffer);
      }
      byte[] signatureData = signature.sign();
      

      修改2

      在用户mkl的帮助下,我能够构建一个实际使用RSA运行的演示代码。步骤是

      1. 使用“官方”签名功能
      2. 创建虚拟对象,使用私钥1对其进行签名
      3. 使用公钥1解密签名以获取哈希值
      4. 使用私钥2
      5. 加密此哈希
      6. 使用“官方”签名功能验证第二个签名。
      7. 可以找到代码here。即使它正在工作,我仍然想知道是否有更优雅的方法来做到这一点?

0 个答案:

没有答案