我在生活中见过很多事情,但这对我来说似乎难以置信。 其实我是java的新手。
我正在尝试建立oauth沟通。
为此我需要签署每个请求。 我使用以下函数:
private String computeHmac(String baseString, String key)
{
Mac mac = null;
try
{
mac = Mac.getInstance("HmacSHA1");
}
catch(NoSuchAlgorithmException ex) { }
SecretKeySpec secret = null;
secret = new SecretKeySpec(key.getBytes(), mac.getAlgorithm());
try
{
mac.init(secret);
}
catch (InvalidKeyException ex)
{
Log.e(Constants.LOG_TAG, "Invalid key: " + ex.getMessage());
}
mac.update(baseString.getBytes());
byte[] digest = mac.doFinal();
return Base64.encodeBytes(digest).trim();
}
上面的函数被包装到一个自定义类中,我用它来进行与oauth相关的操作。
对于oauth,我们必须先进行两次往返才能与目标api进行通信。
第一次正确生成签名。
第二次生成的签名证明总是错误的,因此我开始调试。该函数有两个输入参数。我在eclipse表达式窗口中创建了两行。一个带有函数调用和字符串变量,另一个带有相同的函数调用,以及我从变量值中复制出来的确切字符串值。
第一个表达式的值与错误签名之前的值相同。
惊喜:第二个表达式的值反映了正确的签名。
WTF ???
java中有什么特殊因素我不知道吗?特殊字符串处理还是其他什么?
答案 0 :(得分:0)
这可能是字符串末尾的一个看不见的字符。 如果有人遇到同样的问题,那么检查一下是值得的。 我为此失去了将近一天。