我在尝试使用我的公钥加密时遇到了上述异常。
java.security.InvalidKeyException: IOException: DerInputStream.getLength(): lengthTag=111, too big
Run Code Online (Sandbox Code Playgroud)
代码如下:
public static String encryptWithMyPubKey (String text) throws Exception {
if (myPubKey == null) {
URL path = RSAUtils.class.getResource("pub.der");
System.out.println("Path to private key file" + path.getFile());
File f = new File(path.getFile());
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(fis);
byte[] keyBytes = new byte[(int)f.length()];
dis.readFully(keyBytes);
dis.close();
KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(keyBytes));
}
}
Run Code Online (Sandbox Code Playgroud)
这意味着什么?
我已经解决了这个问题。这是由于 der 二进制文件的格式错误。Maven 构建在将 .der 文件从资源文件夹复制到类路径时应用了过滤器。为了保留这些文件,您需要通过如下更改 pom.xml 来排除 .der 文件(或任何与此相关的二进制文件):
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<!-- here the phase you need -->
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${webappDirectory}/WEB-INF/classes</outputDirectory>
<resources>
<resource>
<directory>src/main/java</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.der</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/java</directory>
<filtering>false</filtering>
<includes>
<include>**/*.der</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1249 次 |
| 最近记录: |