ここで暗号化初心者...ここでは、以下のコードでBouncyCastleを使用して128ビットの暗号化を試みています。BouncyCastleで「強力な」JREポリシーファイルを使用する
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ビット暗号化を行うには、無制限の強度ポリシーファイルをインストールする必要がありますか?
助けを非常に感謝します。
ありがとうございます!
このように動作しない他のPKCS7プロバイダがありますか?私が間違っていなければ、これはバグです、正しい? –
私は同意する傾向があります - JVMはすぐに128ビットを許可する必要がありますが、256以上の場合はUS_export_policyが必要です。正直言って、いったん動作させてしまえば、なぜこれが当てはまるのかあまり考えなかった。 – Chaos
私の場合は恐れることはできません:(私はアプレットのために必要であり、ユーザーは無限の強さにアップグレードすることを知っている(または合法的に許可されている)かもしれません。 –