Tôi phải mã hóa tệp xml bằng cách sử dụng dòng lệnh openssl hoặc C api. Đầu ra phải là Base64.Mã hóa AES với giải mã mở bằng java
Một chương trình java sẽ được sử dụng để giải mã. Chương trình này được cung cấp bởi khách hàng và không thể thay đổi (họ đang sử dụng mã này cho các ứng dụng cũ). Như bạn có thể thấy trong mã bên dưới, khách hàng cung cấp cụm mật khẩu để khóa sẽ được tạo bằng phương thức SecretKeySpec.
mã Java:
// Passphrase
private static final byte[] pass = new byte[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0','1', '2', '3', '4', '5' };
public static String encrypt(String Data) throws Exception {
Key key = generateKey();
Cipher c = Cipher.getInstance("AES/ECB/PKCS5Padding");
c.init(Cipher.ENCRYPT_MODE, key);
byte[] encVal = c.doFinal(Data.getBytes());
String encryptedValue = new BASE64Encoder().encode(encVal);
return encryptedValue;
}
public static String decrypt(String encryptedData) throws Exception {
Key key = generateKey();
Cipher c = Cipher.getInstance("AES/ECB/PKCS5Padding");
c.init(Cipher.DECRYPT_MODE, key);
byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedData);
byte[] decValue = c.doFinal(decordedValue);
String decryptedValue = new String(decValue);
return decryptedValue;
}
private static Key generateKey() throws Exception {
Key key = new SecretKeySpec(pass, "AES");
return key;
}
Tôi đã thử nghiệm một số lệnh như:
openssl enc -aes-128-ecb -a -salt -in file.xml -out file_enc.xml -pass pass:123456789
openssl enc -aes-128-ecb -a -nosalt -in file.xml -out file_enc.xml -pass pass:123456789
Nhưng không trong những kết quả nhất định được successfuly giải mã bằng java. Đối với mục đích thử nghiệm, tôi đã sử dụng mã java đã cho để mã hóa và kết quả dĩ nhiên khác với mã mở từ openssl.
Có cách nào để sử dụng lệnh openssl C api hoặc dòng lệnh để mã hóa dữ liệu để có thể giải mã thành công bằng mã java đã cho không?
Cảm ơn rất nhiều, điều đó đã làm được! –