我一直在摆弄我的程序,并且我一直在使用允许BASIC身份验证的urlread的修改版本。问题是我必须在基本urlread函数中包含以下代码行:
urlConnection.setRequestProperty('Authorization', 'Basic passphrase');
...其中,密码短语是'user:pass'的base64编码字符串。如果我将密码直接放入该行的字符串中,程序将正常工作,当我尝试连接以获得生成的“基本密码短语”字符串时,麻烦就开始了。最初我只是:
['Basic', ' ', passphrase]
之后没有用,我在命令窗口做了一些探索和试验。:
passphrase = 'somerandompassphrase';
teststr1 = ['Basic', ' ', passphrase];
teststr2 = ['Basic', ' ', 'somerandompassphrase'];
teststr3 = 'Basic somerandompassphrase';
strcmp(teststr1, teststr2)
strcmp(teststr1, teststr3)
strcmp(teststr2, teststr3)
输出为1,或每个输出为true(如预期的那样)。但是,如果我使用'somerandompassphrase'的base64encode(即'c29tZXJhbmRvbXBhc3NwaHJhc2U ='):
encoded = base64encode(passphrase);
teststr1 = ['Basic', ' ', encoded];
teststr2 = ['Basic', ' ', 'c29tZXJhbmRvbXBhc3NwaHJhc2U='];
strcmp(teststr1, teststr2)
输出为0或false。不应该是真的吗?可以找到base64encode函数here。
即使是快速测试:
strcmp(encoded, 'c29tZXJhbmRvbXBhc3NwaHJhc2U=')
输出仍为0.
请帮助,我不知道发生了什么。
答案 0 :(得分:2)
如图here所示,您还可以使用与MATLAB捆绑在一起的base64 Java库中的Apache Commons Codec编码器,该编码器可在类路径中使用:
encoder = org.apache.commons.codec.binary.Base64();
b64str = char( encoder.encode(passphrase-0) )';
答案 1 :(得分:1)
在我发布问题之前,我确实想到了这一点,但我想我会继续把它留下来以防人们遇到和我一样的问题。
问题来自base64encode函数。它会自动在字符串末尾添加换行符,导致strcmp函数返回false。要解决此问题,您可以在base64encode函数中包含可选参数的参数,如果您输入空白字符串,则不会在其末尾添加换行符,从而使其起作用。
encoded = base64encode(passphrase, '');