public class AES {
public String getEncrypt(String pass){
String password = encrypt(pass);
return password;
}
public String getDecrypt(String pass){
String key = "AesSEcREtkeyABCD";
byte[] passwordByte = decrypt(key,pass);
String password = new String(passwordByte);
return password;
}
private byte[] decrypt(String key, String encrypted) {
try {
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(skeySpec.getEncoded(), "AES"));
//getting error here
byte[] original = cipher.doFinal(encrypted.getBytes());
return original;
} catch (IllegalBlockSizeException ex) {
ex.printStackTrace();
} catch (BadPaddingException ex) {
ex.printStackTrace();
} catch (InvalidKeyException ex) {
ex.printStackTrace();
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
} catch (NoSuchPaddingException ex) {
ex.printStackTrace();
}
return null;
}
private String encrypt(String value) {
try {
byte[] raw = new byte[]{'A', 'e', 's', 'S', 'E', 'c', 'R', 'E', 't', 'k', 'e', 'y','A','B','C','D'};
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(value.getBytes());
System.out.println("encrypted string:" + (new String(encrypted)));
return new String(encrypted);
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
} catch (IllegalBlockSizeException ex) {
ex.printStackTrace();
} catch (BadPaddingException ex) {
ex.printStackTrace();
} catch (InvalidKeyException ex) {
ex.printStackTrace();
} catch (NoSuchPaddingException ex) {
ex.printStackTrace();
}
return null;
}
** Tôi có một con trỏ rỗng bất cứ khi nào tôi giải mã. đôi khi nó mang lại cho tôi mật khẩu được giải mã chính xác nhưng đôi khi nó mang lại cho tôi một con trỏ rỗng. không thể đoán vấn đề là gì ở đây **java aes javax.crypto.BadPaddingException: Cho khối cuối cùng không được đệm đúng cách
'" NoPadding "' không an toàn cho RSA. '" NoPadding "' là hơi * nhiều hơn * an toàn hơn padding cho mật mã đối xứng như padding oracles là không thể nữa. Tất nhiên, một chế độ như CBC ít chức năng hơn nhiều mà không cần đệm. –
'NoPadding' cũng không an toàn đối với một số dạng truyền tải tham nhũng. Bất kỳ lỗi truyền nào trong hoặc truyền đến, khối cuối cùng sẽ kích hoạt 'BadPaddingException' nếu một số hình thức đệm được mong đợi. 'NoPadding' sẽ bỏ qua tất cả các ngoại lệ như vậy. Bạn trả tiền của bạn và bạn có sự lựa chọn của bạn. – rossum
Chúng tôi sẽ ở lại bất đồng ở đây tôi đoán. Nhưng tôi đã bỏ phiếu và phần còn lại của câu trả lời đã xuất hiện để làm hài lòng Allen, vì vậy đó là OK :) –