2011-08-03 82 views
1

我一直在擺弄我的程序,我一直在使用允許進行BASIC身份驗證的urlread的修改版本。的問題是,我必須包括下面的代碼行到基座urlread功能:比較MATLAB中的字符串問題

urlConnection.setRequestProperty('Authorization', 'Basic passphrase'); 

...其中密碼是的base64編碼的字符串「用戶:通」。如果我將密碼短語直接放到該行的字符串中,程序就可以正常工作,當我嘗試連接以獲得產生的「基本密碼」字符串時,麻煩就開始了。最初,我只是有:

['Basic', ' ', passphrase] 

後沒有工作,我做了一些探索,並在命令窗口中:實驗各地

passphrase = 'somerandompassphrase'; 
teststr1 = ['Basic', ' ', passphrase]; 
teststr2 = ['Basic', ' ', 'somerandompassphrase']; 
teststr3 = 'Basic somerandompassphrase'; 
strcmp(teststr1, teststr2) 
strcmp(teststr1, teststr3) 
strcmp(teststr2, teststr3) 

輸出是1,或真正爲每一個(如預期)。然而,如果我採取 'somerandompassphrase' 的base64encode(這是 'c29tZXJhbmRvbXBhc3NwaHJhc2U ='):

encoded = base64encode(passphrase); 
teststr1 = ['Basic', ' ', encoded]; 
teststr2 = ['Basic', ' ', 'c29tZXJhbmRvbXBhc3NwaHJhc2U=']; 
strcmp(teststr1, teststr2) 

的輸出爲0,或假。它不應該是真的嗎? base64encode函數可以找到here

即使從快速測試:

strcmp(encoded, 'c29tZXJhbmRvbXBhc3NwaHJhc2U=') 

輸出仍爲0

請幫幫忙,我不知道發生了什麼事情。

回答

1

在我發佈問題之前,我實際上已經想到了這一點,但我想我會繼續保留,以防萬一遇到同樣的問題。

問題出自base64encode函數。它會自動將一個換行符添加到字符串的末尾,導致strcmp函數返回false。爲了解決這個問題,你可以在base64encode函數中包含一個可選參數的參數,如果你輸入一個空白字符串,它不會在它的結尾添加一個換行符來使它工作。

encoded = base64encode(passphrase, ''); 
2

如圖所示here,您還可以使用base64編碼器從附帶MATLAB捆綁,並提供在類路徑中的Apache Commons Codec Java庫:

encoder = org.apache.commons.codec.binary.Base64(); 
b64str = char(encoder.encode(passphrase-0))';