【问题标题】:Using "strong" JRE policy files with BouncyCastle在 BouncyCastle 中使用“强”JRE 策略文件
【发布时间】:2009-06-01 03:43:18
【问题描述】:

这里是密码学新手...我正在尝试使用 BouncyCastle 和下面的代码进行 128 位加密。

import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.KeyStore;
import java.security.Security;
import java.security.cert.X509Certificate;

import org.apache.commons.io.IOUtils;
import org.bouncycastle.cms.CMSEnvelopedDataGenerator;
import org.bouncycastle.cms.CMSEnvelopedDataStreamGenerator;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class Test {
        public static void main(String[] args) throws Throwable {
                Security.addProvider(new BouncyCastleProvider());

                KeyStore keyStore = KeyStore.getInstance("PKCS12");

                FileInputStream keyStoreFile = new FileInputStream("test.p12");

                try {
                        keyStore.load(keyStoreFile, "test12".toCharArray());
                } finally {
                        keyStoreFile.close();
                }

                X509Certificate certificate = (X509Certificate) keyStore
                                .getCertificate(keyStore.aliases().nextElement());

                OutputStream output = new BufferedOutputStream(new FileOutputStream(
                                "test.out"));

                try {
                        InputStream input = new FileInputStream("test.in");

                        try {
                                CMSEnvelopedDataStreamGenerator generator = new CMSEnvelopedDataStreamGenerator();

                                generator.addKeyTransRecipient(certificate);

                                OutputStream encryptedOutput = generator.open(output,
                                                CMSEnvelopedDataGenerator.AES128_WRAP, 128,
                                                BouncyCastleProvider.PROVIDER_NAME);

                                try {
                                        IOUtils.copy(input, encryptedOutput);
                                } finally {
                                        encryptedOutput.close();
                                }
                        } finally {
                                input.close();
                        }
                } finally {
                        output.close();
                }
        }
}

但我收到此错误:

Exception in thread "main" org.bouncycastle.cms.CMSException: key inappropriate for algorithm.
        at org.bouncycastle.cms.CMSEnvelopedDataStreamGenerator.open(Unknown Source)
        at org.bouncycastle.cms.CMSEnvelopedDataStreamGenerator.open(Unknown Source)
        at org.bouncycastle.cms.CMSEnvelopedDataStreamGenerator.open(Unknown Source)
        at hk.gov.gld.etb.uploading.pkcs7.Test.main(Test.java:45)
Caused by: java.security.InvalidKeyException: Illegal key size or default parameters
        at javax.crypto.Cipher.a(DashoA13*..)
        at javax.crypto.Cipher.init(DashoA13*..)
        at org.bouncycastle.cms.CMSEnvelopedGenerator$RecipientInf.toRecipientInfo(Unknown Source)
        ... 4 more

我使用的证书是使用JDK的keytool程序生成的,如下:

keytool -genkeypair -dname "cn=test" -alias test -keystore test.p12 -storepass test12 -validity 180 -storetype pkcs12 -keyalg rsa

我使用的JDK版本是6,我使用的BouncyCastle版本是141。

我做对了吗?我还需要安装无限强度策略文件来进行 128 位加密吗?

非常感谢您的帮助。

谢谢!

【问题讨论】:

    标签: java cryptography aes bouncycastle


    【解决方案1】:

    我相信 - 你需要 US_export_policy.jar 和 local_policy.jar。我们需要在我们的项目中做同样的事情,这解决了它。

    我认为您生成和使用的密钥应该没问题,否则。将这两个 jar 添加到 jre/lib/security 中,这应该会立即解决您的问题。

    【讨论】:

    • 是否有其他不这样做的 PKCS7 提供程序?如果我没记错的话,这是一个错误,对吗?
    • 我倾向于同意 - JVM 应该允许开箱即用的 128 位,但对于 256+ 需要 US_export_policy。老实说,一旦我开始使用它,我并没有过多考虑为什么会这样。
    • 恐怕在我的情况下这是不可能的 :( 我需要它作为一个小程序,我们的用户可能不知道(或法律允许)升级到无限强度。
    【解决方案2】:

    BouncyCastle 库的 141 版似乎有一个错误。当我升级到最新版本 (143) 时,完全相同的代码可以工作。

    【讨论】:

      猜你喜欢
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      • 1970-01-01
      • 2020-08-12
      • 2023-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多