记一次 maven resource 对文件自动编码导致文件不可用的问题

记一次 maven resource导致的问题


在最近一次对接中,由于对方采用了秘钥进行加解密,于是将公钥放在了项目中,但是在进行单元测试的时候一直提示

java.security.InvalidKeyException: IOException: DerInputStream.getLength(): lengthTag=111, too big.

而对应的代码调用其实也是很简单的,代码如下

    public static void main(String[] args) throws Exception {
        try{
            String path = Test.class.getClassLoader().getResource("").toURI().toString();
            path = path+"key/public.key";
            URI uri = new URL(path).toURI();
            byte[] publicKeyBytes = Files.readAllBytes(Paths.get(uri));

        }catch (Exception e){
            e.printStackTrace();
        }
    }



    /**
     *
     * @param pinBytes
     * @param publicKeyBytes
     * @return
     */
    private static String encryptPin(byte[] pinBytes, byte[] publicKeyBytes) {
        try {
            byte[] pinEnc = encryptByPublicKey(pinBytes, publicKeyBytes);
            return java.util.Base64.getEncoder().encodeToString(pinEnc);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    private static byte[] encryptByPublicKey(byte[] data, byte[] key) {
        try {
            X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(key);
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            PublicKey publicKey = keyFactory.generatePublic(x509KeySpec);
            Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
            cipher.init(Cipher.ENCRYPT_MODE, publicKey);
            return cipher.doFinal(data);
        }catch (Exception e){
            e.printStackTrace();
          return null;
        }
    }

经过查看日志是在

 X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(key);

这一行报的错,刚开始时百思不得其解,觉得应该没啥问题,后面在自己将代码剥离,独立一个项目进行处理的时候发现是没有报错的。于是开始思考问题在哪里,最后锁定唯一不同的是项目里边的key文件是经过maven打包处理后的,于是对比了两个文件。一个是target目录下的文件,一个是源文件。惊奇的发现文件的大小已经不一致了
。问题找到了,由于public.key已经被修改了,于是就失效了。那么怎么解决呢!通过在pom.xml加入如下代码

<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<configuration><encoding>UTF-8</encoding>
					<!-- Filter certificate files with suffix pkcs12, jks -->
					<nonFilteredFileExtensions>
						<nonFilteredFileExtension>pkcs12</nonFilteredFileExtension>
						<nonFilteredFileExtension>jks</nonFilteredFileExtension>
						<nonFilteredFileExtension>key</nonFilteredFileExtension>
					</nonFilteredFileExtensions>
				</configuration>
			</plugin>

总结
maven 在打包的时候,会对文件进行自动编码,默认采用utf-8编码,那么经过编码的文件可能已经改变了文件本身的内容,最终导致文件不可用,对于这样的文件,需要手动指定不进行处理转换

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值