2017-07-17 30 views
0

我在我的android應用中使用這個庫。 我可以成功編譯它並綁定我的android應用程序中的本地實現,但如果它在32位或64位環境中執行,scryptN函數會產生不同的結果,那怎麼可能? 的Java實現,而不是行之有效的兩種環境SCrypt在x64平臺上產生不同的結果

要重現該問題,只是建立與NDK的共享庫並嘗試運行該功能

public String hashPassword(String plainPassword) { 
     final int shift = 14; 
     final int n = 1 << shift; 
     final int r = 8; 
     final int p = 1; 
     final int dklen = 64; 

     try { 
      return ByteUtils.toHexString(SCrypt.scrypt(
       plainPassword.getBytes("utf-8"), 
       "theseed".getBytes("utf-8"), 
       n, r, p, dklen)); 
     } catch (Exception e) { 
      LogHelper.e("error hashing password", e); 
      return null; 
     } 
    } 

,如果你在32位運行,你會得到不同的輸出架構或64位的一個

謝謝

+0

示例代碼和樣本輸入/輸出? – zaph

+0

儘管將所有調用放在一個混亂中可能非常「困難」,但幾乎不可能進行調試。將調用'plainPassword.getBytes'和'thised'.getBytes'分解爲中間變量,並以十六進制檢查它們。調試的第一步是驗證輸入。爲下一個讀取器和調試器編寫代碼,讓編譯器處理優化,通常在編譯器優化期間組合中間變量。 – zaph

回答

0

最後,我找到了一個解決方案:

對於在Android上使用這個庫的人,我建議用這個叉代替

https://github.com/lhunath/scrypt

它有一個完整的Android NDK項目設置,你只需要運行在SRC /安卓/ JNI文件夾NDK,建設(當然你需要正確配置NDK),它會生成一組可用的.so文件。

注意:你必須改變Application.mk文件以生成它們適用於所有平臺

相關問題