我正在做一个简单的Java程序,该程序从.txt文件中读取AES加密文本并将其解密以将其打印到文本框中。我在IDE中对其进行了测试,一切正常。但是,如果我构建一个.jar并将其打开,则不会在文本框中添加任何文本。 它确实找到了.txt文件,它确实读取了文本,但是我认为解密部分存在问题。
public String decryptAES(String input, String key, String initVector){
try {
IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] original = cipher.doFinal(Base64.decodeBase64(input));
return new String(original);
特别是行byte[] original = cipher.doFinal(Base64.decodeBase64(input));
可能是引起问题的那一行。我无法弄清楚为什么它不能与独立的.jar一起使用。
编辑:我试图自己一步一步调试jar。将堆栈跟踪打印到MsgBoxes并添加注释和诸如此类的内容以查看其停止位置。没有显示堆栈痕迹。似乎在此提到的行之前就停止了:
byte [] original = cipher.doFinal(Base64.decodeBase64(input));
Edit2:加密工作正常。也在IDE之外。继承人的部分:
public String encryptAES(String input, String key, String initVector)
{
try {
IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(input.getBytes());
return Base64.encodeBase64String(encrypted);