【问题标题】:How to correct generate signature using rsa private key with java?java - 如何使用带有java的rsa私钥更正生成签名?
【发布时间】:2015-06-22 04:48:42
【问题描述】:

我是 Java 加密新手,我有一个简单的问题。我有带有 SHA1withRSA 可信私钥和证书的 JKS 密钥库,我需要为 SOAP 消息生成 PKCS#7 签名。 我试着找到了一些关于这个的信息,目前,我有这个:

KeyStore ks = KeyStore.getInstance("JKS");
ks.load(...);//load ks from ks path
//initiate signature(if I do it - Web-Service send me exception:Error while 
//ASN.1-decoding PKCS#7 message
RSAPrivateKey = (RSAPrivateKey) ks.getKey(...);
Signature sign = Signature.getInstance("SHA1WithRSA);
sign.initSign(privatKey);
sign.update(data)//data - final byte[] data - method argument
byte[] bb = sign.sign();
BASE64Encoder enc = new BASE64Encoder();
return encoder.encode(bb);

请告诉我,我的错误在哪里?也许我跳过了需要的课程,并且这段代码没有我想要的那么好。谢谢。

【问题讨论】:

  • 你有什么错误吗?这是一个笼统的问题“我的错误在哪里?”
  • 你确定Signature.getInstance("SHA1WithRSA); 是正确的吗?
  • @rakeb.void 在此之前,我使用 bouncycastle API 并且出现签名验证错误。对于此代码:仅 ASN.1-解码错误
  • @KrishanthyMohanachandran 我有带有 SHA1 算法的 RSA 密钥,我的所有搜索都指向了Signature.getInstance("SHA1WithRSA);
  • 将代码包围在try-catch 块中,并找出问题的确切位置。签名生成部分似乎没问题。

标签: java soap cryptography rsa jks


【解决方案1】:

不,仅生成 PKCS#1 签名是不够的。

PKCS#7 指定Cryptographic Message Syntax (CMS)。这是一种容器格式,而不仅仅是签名。您需要实施 CMS 来创建这样的签名。包含 CMS 实现的知名库是 Bouncy Castle

S/MIME 和 CMS (PKCS7/RFC 3852) 的生成器/处理器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-25
    • 2011-08-21
    • 2011-07-11
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    相关资源
    最近更新 更多