java - 如何使用java正确使用rsa私钥生成签名?

标签 java soap cryptography rsa jks

我是 Java 加密领域的新手,我有一个简单的问题。我有带有 SHA1withRSA 可信私钥和证书的 JKS keystore ,并且需要为 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);

请告诉我,我的错误在哪里?也许我跳过了需要的类(class),并且这段代码的工作效果不如我想要的那样好。谢谢。

最佳答案

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

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

Generators/Processors for S/MIME and CMS (PKCS7/RFC 3852).

关于java - 如何使用java正确使用rsa私钥生成签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30972276/

相关文章:

java - 将 Scala 运算符添加到最终的 Java 类

java - 如何使用 JAX-WS 在 AXL Java 客户端中使用 GetLineReq

android - 如何使用 KSOAP2 从 body 获取数据 - android

ASP.NET Web 服务安全

node.js - crypto和bcrypt有什么区别

encryption - 如何确定 zip 文件的加密方案

java - 如何在 Java 中使用 Axon Framework 区分空响应和超时

java - 避免在 Java 中循环从 Set<Entity> 获取某一特定列的值

java - 在 Spring 中,可以从 @Controller 类中的单个方法调用两个不同的服务吗?

Python 抓取加密比较