2012-02-13 61 views
2

我有一個Java應用程序通過XML向供應商發送(HTTP post method)信用卡號碼。 當寫入XML文件時,當前信用卡號碼也打印在文件中。但將信用卡號直接寫入文件而不進行加密並不是一種好的做法。加密寫入到java文件的XML元素

我不想加密整個XML,因爲我們通過HTTPS鏈接發送安全信息,因此我認爲它提供了必要的安全性。所以我想在Java環境中寫入文件時只加密信用卡號碼元素。

String xmlRequest = <?xml version='1.0'?> 
    <ReservationRequest> 
    <Passenger> 
    <firstName>XXX</firstName> 
    <lastName>YYY</lastName> 
    </Passenger>  
    <CreditCard Currency='USD'> 
     <Number>1234567812345678</Number> 
     <cvv>123</cvv> 
     <Expiration>12/12</Expiration> 
    </CreditCard> 
    </ReservationRequest> 

請注意,我想寫入文件發送到供應商相同的字符串。

+0

當你說「寫入文件」你只是意味着你的日誌? – 2012-02-13 11:05:53

+0

是的,正好寫。我們有日誌文件夾,它包含所有XML日誌 – 2012-02-13 11:11:24

+2

在這種情況下,爲什麼不通過一個解析Number標記的方法傳遞xml,然後用除了最後四位數字之外的astericks替換內容? – 2012-02-13 11:51:42

回答

1
 String reqXml       = "" ;  

     String creditCardNumber     = "1234567890128899" ;  

     reqXml = "<RentalPaymentPref>" + 
     "<PaymentCard CardType=\"1\" CardCode=\"VI\" CardNumber=\""+creditCardNumber+"\" ExpireDate=\"0912\" SeriesCode=\"123\">" + 
     "<CardHolderName>Ruchira kariyawasam</CardHolderName>" + 
     "</PaymentCard>" + 
     "</RentalPaymentPref>" ;   

     StringBuffer reqXmlString = new StringBuffer(reqXml.toString());  

     short startIndex = (short)(reqXml.indexOf("CardNumber")+12); 


     if(null!=creditCardNumber && (!creditCardNumber.equals(""))) 
     { 
      reqXmlString.replace(startIndex,(startIndex+12),"xxxxxxxxxxxx");    
     }  

     System.out.println("reqXmlString---->"+reqXmlString); 


// Remaining file writing code goes here. 

這裏檢查卡號是空的還是空的。如果我們得到卡號,那麼在寫入文件時只屏蔽字符串內容。

輸出

<RentalPaymentPref> 
<PaymentCard CardType="1" CardCode="VI" CardNumber="xxxxxxxxxxxx8899" ExpireDate="0912" SeriesCode="123"> 
<CardHolderName>Ruchira kariyawasam</CardHolderName> 
</PaymentCard> 
</RentalPaymentPref>