如何解决错误 Salt must be 8 bytes long

Posted

技术标签:

【中文标题】如何解决错误 Salt must be 8 bytes long【英文标题】:How to resolve error Salt must be 8 bytes long 【发布时间】:2017-02-17 08:37:38 【问题描述】:

我正在编写一个使用证书(pfx 文件)签署 pdf 的程序。对于少数证书,我得到了以下例外。

java.security.InvalidAlgorithmParameterException: Salt must be at least 8 bytes long

当我执行以下代码时会发生这种情况。

Keystore ks = KeyStore.getInstance("pkcs12");

我在以下 java 文件的第 123 行遇到异常。 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/com/sun/crypto/provider/HmacPKCS12PBESHA1.java?av=h

【问题讨论】:

【参考方案1】:

您的密钥库有一个或多个盐长度小于 8 的证书。加密程序需要至少 8 个字节。

我建议只使用您需要的一个证书创建一个新的密钥库,然后尝试使用该证书进行签名。

【讨论】:

【参考方案2】:

我使用 pkcs12-DEF 密钥库解决了异常。我在下面添加了我的代码行。

BouncyCastleProvider provider = new BouncyCastleProvider();
Security.addProvider(provider);
KeyStore ks = KeyStore.getInstance("pkcs12-DEF");

之前我没有将 BountyCastleProvider 添加到 Security,因此我无法获取 pkcs12-DEF 密钥库的实例。 除此之外,我还从http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html 位置下载了 jar 文件,并将其替换为 Java\Jdk1.7\jre\lib\security 中的 jar 文件。这些是 JCE 7 无限强度策略文件。

【讨论】:

以上是关于如何解决错误 Salt must be 8 bytes long的主要内容,如果未能解决你的问题,请参考以下文章

我的Android进阶之旅------>如何解决Android 5.0中出现的警告: Service Intent must be explicit:

报错解决方法1:‘A GDAL API version must be specified.’

Unicode-objects must be encoded before hashing 错误解决办法

Check failed: vm. Must be able to initialize the VM.错误解决方法

django1.11 启动错误:Generator expression must be parenthesized

错误ValueError: malformed SHA512 hash (checksum must be exactly 86 chars)解决办法