该答案假设无法安装无限强度管辖加密文件使用提到的脚本。
密钥大小限制Cipher
在里面Cipher
类本身。它不可能(轻易)绕过它。
相反,您可以使用 Bouncy Castle 轻量级 API。轻量级 API 是轻量级的,因为 API 实现本身所需的类数量较多,但对您而言并不多。
例如(AES CBC 与 PKCS#7(PKCS#5 兼容)填充:
public class BouncyLightWeightCipherExample {
private static final boolean FOR_DECRYPTION = false;
public static void main(String[] args) throws NoSuchAlgorithmException, Exception {
final byte[] keyData = new byte[256 / Byte.SIZE];
final byte[] ivData = new byte[16];
final byte[] testData = "owlstead".getBytes(UTF_8);
// JCE creation
final Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
// initialization
c.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(keyData, "AES"), new IvParameterSpec(ivData));
// and encryption
final byte[] ciphertext = c.doFinal(testData);
// Bouncy Castle creation
final BlockCipher blockCipher = new AESFastEngine();
final CBCBlockCipher withModeOfOperation = new CBCBlockCipher(blockCipher);
final PaddedBufferedBlockCipher withPadding = new PaddedBufferedBlockCipher(withModeOfOperation);
// initialization
final ParametersWithIV keyAndIV = new ParametersWithIV(new KeyParameter(keyData), ivData);
withPadding.init(FOR_DECRYPTION, keyAndIV);
// and decryption
int plaintextSize = withPadding.processBytes(ciphertext, 0, ciphertext.length, ciphertext, 0);
plaintextSize += withPadding.doFinal(ciphertext, plaintextSize);
final byte[] plaintext = Arrays.copyOf(ciphertext, plaintextSize);
// there we are
System.out.println(new String(plaintext, UTF_8));
}
}