2011-08-03 15 views
1

私は自分のプログラムを試していましたが、BASIC認証を可能にする修正されたバージョンのurlreadを使用しています。パスフレーズは、 ':パスユーザーのbase64でエンコードされた文字列であるMATLABで文字列を比較する問題

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

...:問題は、私は基本urlread関数に次のコード行を含める必要があるということです。その行の文字列にパスフレーズを直接置くとプログラムは正常に動作しますが、結果として「基本パスフレーズ」文字列を得るために連結しようとするとトラブルが起きます。当初、私はちょうど持っていた:

['Basic', ' ', passphrase] 

をそれは私がいくつか模索し、コマンドウィンドウに周りの実験でした動作しませんでした後:

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

出力は予想通り1、または各1に対して真(あります)。私は( 'c29tZXJhbmRvbXBhc3NwaHJhc2U =' ある ')somerandompassphrase' のbase64encodeを取るしかし場合:

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

出力が0、またはfalseです。しかしそれは本当ではありませんか? base64encode関数はhereです。簡単なテストでさえから

strcmp(encoded, 'c29tZXJhbmRvbXBhc3NwaHJhc2U=') 

出力はまだ助けてください0

ですが、私は何が起こっているか見当がつかない。

答えて

1

私は質問を投稿する前に実際にこれを理解しましたが、同じような問題に遭遇した場合に備えて、私は先に進んでいきます。

問題はbase64encode関数の問題です。文字列の最後に改行文字が自動的に追加され、strcmp関数がfalseを返すようになります。この問題を解決するには、オプションのパラメータのパラメータをbase64encode関数に含めることができます。空の文字列を入力すると、その末尾に改行文字は追加されません。

encoded = base64encode(passphrase, ''); 
2

hereを示すように、あなたはまた、MATLABにバンドルし、クラスパス上で使用可能です来るApache Commons Codec Javaライブラリからbase64エンコーダを使用することができます。

encoder = org.apache.commons.codec.binary.Base64(); 
b64str = char(encoder.encode(passphrase-0))'; 
関連する問題