这是我的代码的加密部分。它编译得很好,但在运行时失败并带有异常:
import java.util.Random;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
...
byte[] salt = new byte[8];
Random rand = new Random();
rand.nextBytes(salt);
PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithSHAAndTwofish-CBC");
SecretKey key = keyFactory.generateSecret(keySpec);
PBEParameterSpec paramSpec = new PBEParameterSpec(salt, 1000);
Cipher cipher = Cipher.getInstance("PBEWithSHAAndTwofish-CBC");
cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
byte[] ciphertext = cipher.doFinal(plaintext);
这个算法不附带Java 1.5吗?我不介意使用其他算法,我只是不知道可用的是什么。我希望我不必使用像bouncycastle这样的外部库,因为我已经挣扎了好几天试图让它工作无效(通过在我的.jar应用程序中包含它会触发“无效的签名文件摘要”错误)
答案 0 :(得分:2)
如果你不想依赖像BouncyCastle这样的外部库,你可能不得不使用其他密码。
请参阅the documentation about Sun crypto providers,了解有关直接支持的内容的详细信息。