Tôi có phương pháp ColdFusion để giải mã chuỗi: PFN123
. Nó sử dụng thuật toán AES, mã hóa HEX và có độ dài 128 bit. Đầu ra là:ColdFusion Java Đầu ra mã hóa khác nhau cho cùng một chuỗi với thuật toán AES
32952063062A232355AABB63E129EA9F
Tôi đã viết mã java tương đương để mã hóa và giải mã AES. Tuy nhiên, nó tạo ra một kết quả khác:
07e342ad4b59b276cbb6418248aaf886.
Tôi không hiểu tại sao kết quả lại khác nhau cho cùng một thuật toán và lược đồ mã hóa. Có ai giải thích tại sao không? Cảm ơn trước.
Mã Java:
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Hex;
public class AESEncryptionDecryptionTest {
private static final String ALGORITHM = "AES";
private static final String myEncryptionKey = "OIXQUULC7khaJzzOOHRqgw==";
private static final String UNICODE_FORMAT = "UTF8";
public static String encrypt(String valueToEnc) throws Exception {
Key key = generateKey();
Cipher c = Cipher.getInstance(ALGORITHM);
c.init(Cipher.ENCRYPT_MODE, key);
byte[] encValue = c.doFinal(valueToEnc.getBytes(UNICODE_FORMAT));
String encryptedValue = new Hex().encodeHexString(encValue);
return encryptedValue;
}
public static String decrypt(String encryptedValue) throws Exception {
Key key = generateKey();
Cipher c = Cipher.getInstance(ALGORITHM);
c.init(Cipher.DECRYPT_MODE, key);
byte[] decordedValue = new Hex().decode(encryptedValue.getBytes());
byte[] decValue = c.doFinal(decordedValue);//////////LINE 50
String decryptedValue = new String(decValue);
return decryptedValue;
}
private static Key generateKey() throws Exception {
byte[] keyAsBytes;
keyAsBytes = myEncryptionKey.getBytes();
Key key = new SecretKeySpec(keyAsBytes, ALGORITHM);
return key;
}
public static void main(String[] args) throws Exception {
String value = "PFN123";
String valueEnc = AESEncryptionDecryptionTest.encrypt(value);
String valueDec = AESEncryptionDecryptionTest.decrypt(valueEnc);
System.out.println("Plain Text : " + value);
System.out.println("Encrypted : " + valueEnc);
System.out.println("Decrypted : " + valueDec);
}
}
ColdFusion bổ sung đang làm gì trong phương thức ẩn giải mã mà tôi đang thiếu trong Java ?? –
Nó có thể sử dụng mã hóa khác với UTF8, sử dụng một chế độ chuỗi khối khác, sử dụng một phần đệm khác (và dĩ nhiên là một khóa đầu vào khác, nhưng tôi đoán bạn đã kiểm tra). –
Có thử tất cả ba lựa chọn của tất cả các kết hợp .... Vấn đề của tôi là tôi phải mã hóa một chuỗi trong coldFusion và sau đó giải mã nó trong Java. –