2011-12-06 3 views
4

XML을 암호화하여 서버로 보내야하는 응용 프로그램을 만들고 있습니다. 응답으로 xml을 수신하고 해독해야합니다. 나는 암호화하고 해독 할 생각이 없다.xml 암호화 및 해독

<?xml version='1.0' encoding='utf-8'?><adm_auth_req><user_name>user.s7</user_name><password>gspcsmo</password></adm_auth_req> 

를 다음과 같이 내 코드는 내가 암호화하고 헛된 그것을 여전히

public string encryptData(string key, string data) 
{ 
    int keyLen = key.Length; 
    int dataLen = Convert.ToInt16(data.Length); 
    char chData; 
    char chKey; 
    char[] data1 = data.ToCharArray(); 
    char[] key1 = key.ToCharArray(); 
    StringBuilder encryptedData = new StringBuilder(); 
    for (int i = 0; i < dataLen; i++) 
    { 
     chData = data1[i]; 
     for (int j = 0; j < keyLen; j++) 
     { 
      chKey = key1[j]; 
      chData = (char)(chData^chKey); 
     } 
     encryptedData.Append(chData); 
    } 
    return (encryptedData.ToString()); 
} 

그러나 모든 암호를 해독하는 데이 코드를 사용하고있다. 아무도 그것을 암호화하고 결과를 해독하는 방법을 말해 줄 수 있습니까?

답변

1

나는 암호화 및 암호 해독을위한 DES의 algorith을 사용했다.

암호화의 경우 : 여기에 암호화 후 저장 파일을 쓰고 있습니다. 다른 (임시) 이름으로 저장하고 서버로 보낼 수 있습니다. 전송 성공 후에는 암호 해독을 위해이 암호화 된 파일

FileOutputStream fos = null ; 
    CipherInputStream cis; 

    byte key[] = "abcdEFGH".getBytes(); 
    SecretKeySpec secretKey = new SecretKeySpec(key,"DES"); 

    Cipher encrypt = Cipher.getInstance("DES/ECB/PKCS5Padding"); 
    encrypt.init(Cipher.ENCRYPT_MODE, secretKey); 

    InputStream fis = new ByteArrayInputStream(fileData);//Here I am getting file data as byte array. You can convert your file data to InputStream by other way too. 

    File dataFile = new File(dataDir,fileName); //dataDir is location where my file is stored 
    if(!dataFile.exists()){ 
     cis = new CipherInputStream(fis,encrypt); 
     try { 
      fos = new FileOutputStream(dataFile); 
       byte[] b = new byte[8]; 
       int i; 
       while ((i=cis.read(b)) != -1) { 
        fos.write(b, 0, i); 
      }     
      return fileName; 
     } finally{ 
      try { 
       if(fos != null) 
       { 
       fos.flush(); 
       fos.close(); 
       } 
       cis.close(); 
       fis.close(); 
      } catch (IOException e) { 
       //IOException 
      } 
     } 
    }    
    return ""; 

을 삭제할 수 있습니다

CipherInputStream cis; 
    FileOutputStream fos = null; 
    FileInputStream fis = null; 

    File dataFile = new File(dataDir,fileName); // here I am getting encrypted file from server 
    File newDataFile = new File(dataDir,fileName+"_TEMP"); // I am creating temporary decrypted file 

    byte key[] = "abcdEFGH".getBytes(); 
    SecretKeySpec secretKey = new SecretKeySpec(key,"DES"); 

    Cipher decrypt = Cipher.getInstance("DES/ECB/PKCS5Padding"); 
    decrypt.init(Cipher.DECRYPT_MODE, secretKey); 

    try {   
     fis = new FileInputStream(dataFile); 
    } catch(Exception e) { 
     //Exception 
    } 

    if(dataFile.exists()){ 
     cis = new CipherInputStream(fis,decrypt); 
     try { 
      fos = new FileOutputStream(newDataFile); 
       byte[] b = new byte[8]; 
      int i; 
       while ((i=cis.read(b)) != -1) { 
        fos.write(b, 0, i); 
      }     
      return newDataFile; 
     } finally{ 
      try { 
       if(fos != null) 
       { 
       fos.flush(); 
       fos.close();     } 
       cis.close(); 
       fis.close(); 
      } catch (IOException e) { 
       //IOException 
      } 
     } 
    } 
+1

을 내가 이제 어떻게 위의 XML을 암호화하는 말해 서버 –

+0

참조하시기 바랍니다 의견의 응답을 해독 코드를 사용하고 자세한 내용은 위의 코드를 참조하십시오. –

+0

abcdEFGH가 비밀 키입니다. –

3

해결하려는 문제가 무엇인가요?

SSL이 (가) 어울리는 사람입니까? 박스에서 벗어나 암호화, 표준 솔루션

또한 JCA을 살펴볼 수 있습니다. 하지만 제 생각에 그것은 당신의 문제에 너무 무거운 해결책이 될 것입니다.

1

Twofish을 사용하지 않을까요? XML은 Text이며 알고리즘 만 있으면됩니다. 따라서 examples을 많이 찾을 수 있습니다.

1

제 생각에는 사용자 지정 알고리즘을 처음에는 구현하지 말아야하며 바퀴를 다시 발명하고 두 번째로 다른 표준 암호화 루틴만큼 안전한 곳에 두지 않는 것이 좋습니다. 내가 너라면 자바 암호화 라이브러리에 대해 살펴볼 것이다. 내가 찾은 사람은 여기에 있습니다. http://www.bouncycastle.org/latest_releases.html