函数返回错误的结果,但调试器中的结果很好,具有相同的字符串参数

时间:2011-09-20 20:13:27

标签: java android eclipse debugging digital-signature

我在生活中见过很多事情,但这对我来说似乎难以置信。 其实我是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中有什么特殊因素我不知道吗?特殊字符串处理还是其他什么?

1 个答案:

答案 0 :(得分:0)

这可能是字符串末尾的一个看不见的字符。 如果有人遇到同样的问题,那么检查一下是值得的。 我为此失去了将近一天。