簡體   English   中英

函數返回錯誤的結果,但在調試器中使用相同的字符串參數返回良好的結果

[英]Function returns wrong result but good result in the debugger with same string parameters

我一生中看過很多事情,但這對我來說似乎是難以置信的。 其實我是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中有什么特殊因素嗎? 特殊的字符串處理還是什么?

它是一個不可見的字符,可能在字符串末尾\\ n。 如果有人遇到相同的問題,值得檢查一下。 我為此損失了將近一天的時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM