0
点赞
收藏
分享

微信扫一扫

Android studio DerInputStream.getLength(): lengthTag=109, too big.Failed to

Android Studio: 解决 DerInputStream.getLength(): lengthTag=109, too big.Failed to 的问题

简介

在使用 Android Studio 开发 Android 应用程序时,你可能会遇到 DerInputStream.getLength(): lengthTag=109, too big.Failed to 的错误。该错误通常发生在尝试使用包含较大数据的证书或密钥库时。本文将解释该错误的原因,并提供解决方案来解决该问题。

问题原因

该错误是由于 Android Studio 使用的 Bouncy Castle 加密库在解析较大 DER 编码数据时的限制引起的。Bouncy Castle 是一个流行的加密库,用于在 Java 和 Android 应用程序中提供强大的加密功能。然而,它在 DER 编码数据的解析方面存在一些限制。

解决方案

要解决 DerInputStream.getLength(): lengthTag=109, too big.Failed to 错误,有两种常见的方法:

方法一:增加 Bouncy Castle 的缓冲区大小

第一种解决方案是增加 Bouncy Castle 的缓冲区大小,以容纳较大的 DER 编码数据。你可以通过以下步骤来实现:

  1. 打开 build.gradle 文件,找到 android 块。
  2. android 块内部添加以下代码:
packagingOptions {
    exclude 'META-INF/BCKEY.DSA'
    exclude 'META-INF/BCKEY.SF'
}
  1. 重新构建项目并运行。这样,Bouncy Castle 库将使用增加的缓冲区大小来解析 DER 编码数据。

方法二:使用 Spongy Castle 替代 Bouncy Castle

第二种解决方案是使用 Spongy Castle 替代 Bouncy CastleSpongy CastleBouncy Castle 的一个修改版本,专为 Android 平台优化。它解决了 Bouncy Castle 在 Android 应用程序中存在的一些问题,包括 DER 编码数据的限制。

以下是如何在 Android Studio 中使用 Spongy Castle 的步骤:

  1. build.gradle 文件中添加以下依赖项:
implementation 'com.madgag.spongycastle:prov:1.58.0.0'
  1. 在代码中使用 Spongy Castle 的类和方法。例如:
import org.spongycastle.util.encoders.Base64;
import org.spongycastle.util.encoders.Hex;
import org.spongycastle.util.encoders.UrlBase64Encoder;

// 使用 Spongy Castle 的 Base64 编码
String encoded = new String(Base64.encode(data));

// 使用 Spongy Castle 的 Hex 编码
String encodedHex = new String(Hex.encode(data));

// 使用 Spongy Castle 的 URL Base64 编码
String encodedUrlBase64 = new String(UrlBase64Encoder.encode(data));
  1. 重新构建项目并运行。现在,你将能够使用 Spongy Castle 来解析较大的 DER 编码数据,而不会遇到 DerInputStream.getLength(): lengthTag=109, too big.Failed to 错误。

结论

在开发 Android 应用程序时,可能会遇到 DerInputStream.getLength(): lengthTag=109, too big.Failed to 错误。本文提供了两种解决方案来解决该问题。你可以增加 Bouncy Castle 的缓冲区大小或使用 Spongy Castle 替代 Bouncy Castle。希望本文能够帮助你解决该错误,并顺利进行 Android Studio 的开发工作。

举报

相关推荐

0 条评论