【问题标题】:Encrypting and decrypting xml [closed]加密和解密 xml [关闭]
【发布时间】:2025-11-30 09:35:01
【问题描述】:

我正在制作一个应用程序,我必须从我身边加密 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());
}

但一切都是徒劳的。谁能告诉我如何加密和解密结果?

【问题讨论】:

  • 你所说的“一切都是徒劳的”是什么意思? 究竟是什么不适用于该代码?

标签: java android xml encryption


【解决方案1】:

我已经使用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
            }
        }
    }

【讨论】:

  • 我正在使用您的代码,所以现在告诉我如何加密上述 xml 并解密来自服务器的响应
  • 那么什么是DES和DES/ECB/PKCS5Padding?
  • 但我仍然不清楚 DES 和 DES/ECB/PKCS5Padding 是什么??
  • 建议的解决方案在密码学上不正确,我强烈建议您不要遵循 Balaji K 的任何其他建议(对不起,但事实就是如此)。对于这种加密,DES 和 ECB 是不正确的算法,对于客户端/服务器,您还需要完整性和身份验证控制。我会尝试重新处理此问题,同时将其标记出来。
【解决方案2】:

你为什么不使用Twofish,XML 是文本,你需要使用的只是算法,你可以找到很多examples

【讨论】:

    【解决方案3】:

    已经有一些关于 SO 的答案可能适合您的答案。

    Encrypt and decrypt a String in java

    How to encrypt String in Java

    【讨论】:

      【解决方案4】:

      在我看来,您不应该尝试实现自定义算法,因为首先是在重新发明*,其次它可能不会像其他更标准的加密例程那样安全。如果我是你,我会四处寻找一些好的 Java 加密库。我在这里找到了一个,http://www.bouncycastle.org/latest_releases.html

      【讨论】:

        【解决方案5】:

        你要解决什么问题?

        也许SSL 匹配你? 开箱即用的加密,标准解决方案。

        你也可以看看JCA。但我认为,这对你的问题来说太重了。

        【讨论】: