如何从Java字符串加载EC私钥



我有一个存储在Java字符串中的EC私钥。我使用以下代码读取字符串并将其转换为PrivateKey对象,我需要该对象生成一个带有ECDSA签名的SHA256。

import org.bouncycastle.openssl.PEMParser;
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
public static PrivateKey getPrivateKey()  {
try {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Reader rdr = new StringReader("-----BEGIN EC PRIVATE KEY-----n" +
"<line1>n" +
"<line2>n" +
"<line3>n" +
"-----END EC PRIVATE KEY-----n");
Object parsed = new PEMParser(rdr).readObject();
KeyPair pair = new JcaPEMKeyConverter().getKeyPair((org.bouncycastle.openssl.PEMKeyPair) parsed);
return pair.getPrivate();
} catch (IOException e) {
logger.error("IOException generating private key {} ", e);
}
return null;
}

我能够使用IntelliJ中的单元测试成功生成PrivateKey。然而,当我在Tomcat上部署war时,这段代码会引发以下异常:类";org.bouncycastle.asn1.pkcs.RSAPPublicKey"'s签名者信息与同一包中其他类的签名者信息不匹配

Maven依赖树输出:

mvn dependency:tree | grep -i "bouncycastle"
[INFO] |  |  |  +- org.bouncycastle:bcmail-jdk15on:jar:1.49:compile
[INFO] |  |  |  +- org.bouncycastle:bcprov-jdk15on:jar:1.49:compile
[INFO] |  |  |  +- org.bouncycastle:bcpkix-jdk15on:jar:1.49:compile
[INFO] |  |  |  |  +- org.bouncycastle:bcmail-jdk15:jar:1.45:compile
[INFO] |  |  |  |  +- org.bouncycastle:bcprov-jdk15:jar:1.45:compile

我将其中一个版本添加到pom排除项中。仍然面临同样的问题:

<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bcmail-jdk15</artifactId>
</exclusion>
<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15</artifactId>
</exclusion>

任何指针都将受到赞赏。

谢谢。

最终从战争包装中排除了不需要的版本,解决了这个问题。在我的pom中添加了"packagingExcludes"。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<packagingExcludes>
WEB-INF/lib/bcmail-jdk15-1.45.jar,
WEB-INF/lib/bcprov-jdk15-1.45.jar
</packagingExcludes>
</configuration>
</plugin>

参考编号:https://maven.apache.org/plugins/maven-war-plugin/examples/including-excluding-files-from-war.html

最新更新