2013-03-11 2 views
5

के साथ एक ही स्ट्रिंग के लिए अलग एन्कोडिंग आउटपुट मेरे पास स्ट्रिंग के डिक्रिप्शन के लिए एक कोल्डफ्यूजन विधि है: PFN123। यह एईएस एल्गोरिदम, हेक्स एन्कोडिंग का उपयोग करता है और इसकी लंबाई 128 बिट्स है। आउटपुट है:कोल्डफ्यूजन जावा एईएस एल्गोरिदम

32952063062A232355AABB63E129EA9F 

मैंने एईएस एन्क्रिप्शन और डिक्रिप्शन के लिए समकक्ष जावा कोड लिखा है।

07e342ad4b59b276cbb6418248aaf886. 

मुझे समझ नहीं आता क्यों परिणाम एक ही एल्गोरिथ्म और एन्कोडिंग स्कीम के लिए अलग हैं: हालांकि यह एक अलग परिणाम पैदा करता है। क्या कोई बता सकता है क्यों? अग्रिम में धन्यवाद।

जावा कोड:

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); 
    } 

} 
+0

क्या अतिरिक्त ColdFusion अपने डिक्रिप्ट निहित विधि है जो मैं जावा में याद आ रही है में क्या कर रही है ?? –

+0

यह यूटीएफ 8 की तुलना में एक और एन्कोडिंग का उपयोग कर सकता है, एक अलग ब्लॉक चेनिंग मोड का उपयोग करें, एक अलग पैडिंग (और निश्चित रूप से इनपुट की एक और कुंजी का उपयोग करें, लेकिन मुझे लगता है कि आपने इसे चेक किया है)। –

+0

हां सभी संयोजनों द्वारा सभी तीन विकल्पों को आजमाया .... मेरी समस्या यह है कि मुझे ठंड फ़्यूज़न में स्ट्रिंग को एन्क्रिप्ट करना होगा और फिर इसे जावा में डिक्रिप्ट करना होगा। –

उत्तर

2

समर्थन के लिए धन्यवाद। मुझे मेरा जवाब मिल गया है। कोल्डफ्यूजन अपने बेस 64 डीकोडेड बाइट्स में कुंजी संग्रहीत कर रहा है। तो जावा में हम BASE64Decoder के माध्यम से डिकोडिंग द्वारा कुंजी उत्पन्न करने के लिए है:

private static Key generateKey() throws Exception 
{ 
    byte[] keyValue; 
    keyValue = new BASE64Decoder().decodeBuffer(passKey); 
    Key key = new SecretKeySpec(keyValue, ALGORITHM); 

    return key; 
} 
संबंधित मुद्दे