Шифрование и дешифрование XML - PullRequest
4 голосов
/ 06 декабря 2011

Я создаю приложение, в котором я должен зашифровать 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());
}

Но все же все напрасно.Может кто-нибудь сказать мне, как зашифровать его и расшифровать результат?

Ответы [ 5 ]

3 голосов
/ 06 декабря 2011

Какую проблему вы решаете?

Возможно SSL подходит вам?Шифрование из коробки, стандартное решение.

Также вы можете взглянуть на JCA .Но я думаю, это будет слишком тяжелым решением для вашей проблемы.

1 голос
/ 06 декабря 2011

Я использовал алгоритм DES для шифрования и дешифрования.

Для шифрования: здесь после шифрования я пишу файл для сохранения. Вы можете сохранить его под другим (временным) именем и отправить на сервер. После успешной отправки вы можете удалить этот зашифрованный файл

    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 голос
/ 06 декабря 2011

На SO уже есть несколько ответов, которые могут соответствовать вашему ответу.

Шифрование и дешифрование строки в Java

Как зашифровать строку в Java

1 голос
/ 06 декабря 2011

По моему мнению, вы не должны пытаться реализовать собственный алгоритм, во-первых, вы заново изобретаете колесо, а во-вторых, он, вероятно, будет далеко не так безопасен, как другие более стандартные процедуры шифрования. На вашем месте я бы посмотрел на некоторые хорошие библиотеки Java Encryption. Один я нашел здесь, http://www.bouncycastle.org/latest_releases.html

1 голос
/ 06 декабря 2011

Почему вы не используете Twofish для этого, XML - это текст, и все, что вам нужно - это алгоритм, и вы можете найти множество примеров для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...