【问题标题】:New line and spaces automatically inserted in StringString 中自动插入新行和空格
【发布时间】:2015-12-18 14:09:36
【问题描述】:

为了使用 API 进行身份验证,我创建了一个包含用户电子邮件和密码的编码字符串,如下所示:

String userpass = u[0].getEmail() + ":" + u[0].getPassword();
userpass = Base64.encodeToString(userpass.getBytes("UTF-8"), Base64.DEFAULT);
String basicAuth = "Basic " + userpass;
HttpUrlConnection conn = new HttpUrlConnection(); 
conn.setRequestProperty("Authorization", basicAuth);

问题在于,一旦生成了这个字符串,就会添加新的行和空格,这使得字符串看起来像这样:

授权:基本 dHJpc3RhbkBjb3BheS5jb206MTA3ZDM0OGJmZjQzN2M5OTlhOWZmMTkyYWRjYjc4Y2IwM2I4ZGRj 吴==

这导致 API 只能看到第一部分(而不是“Ng==”部分),从而导致服务器认为电子邮件和密码有问题。

我已经尝试过所有可能的 String.Replace 和 ReplaceAll 形式,但似乎没有帮助。

一个建议是在 API 本身上修复字符串,但由于 API 没有接收到整个字符串,这是没有选择的。

欢迎提出建议,先谢谢了

【问题讨论】:

  • 是什么让你说有换行符和空格?你是怎么检查的?显示您打印的代码
  • 当我从 Base64 解码你的字符串时,输出是'tristan@copay.com:107d348bff437c999a9ff192adcb78cb03b8ddc6'。这是正确的吗?
  • 是的,密码是密码“Azerty123”的Sha1哈希我还添加了一个android studio的截图,显示了conn.getRequestProperty的lof
  • 这是正常行为。来自RFC4648MIME enforces a limit on line length of base 64-encoded data to 76 characters
  • 你从哪里得到这个Base64 类? Java 8 引入了java.util.Base64,但你没有使用它(它没有encodeToString() 方法)......那么你在使用谁的Base64

标签: java string authorization httpurlconnection


【解决方案1】:

我对此感到很愚蠢,但 Base64 实际上有办法使这项工作。 只需将加密方法设置为“Base64.No_WRAP”而不是“Base64_DEFAULT”。 正在考虑删除该问题,但如果有人遇到类似问题,我希望它可以节省他们一些时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多