2017-07-17 5 views
0

Ich verwende diese Bibliothek in meiner Android App. Ich kann es erfolgreich kompilieren und binden die native Implementierung in meiner Android-App, aber die scryptN-Funktion erzeugt ein anderes Ergebnis, wenn es in einer 32-Bit- oder 64-Bit-Umgebung ausgeführt wird, wie kann es möglich sein? Die Java-Implementierung arbeitet stattdessen auch auf beiden UmgebungenSCrypt produziert unterschiedliche Ergebnisse auf x64-Plattform

das Problem zu reproduzieren, baut nur die gemeinsame Bibliotheken mit NDK und versucht, diese Funktion

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; 
     } 
    } 

Sie erhalten verschiedene Ausgänge zu laufen, wenn Sie auf einem 32-Bit laufen Architektur oder ein 64-Bit ein

Danke

+0

Beispiele Code und Beispiel Eingabe/Ausgabe zu generieren? – zaph

+0

Während es sehr "leet" sein kann, alle Anrufe in einem Durcheinander zu setzen, ist es praktisch unmöglich zu debuggen. Brechen Sie die Aufrufe 'plainPassword.getBytes' und' theseed.getBytes' in Zwischenvariablen und sie untersuchen sie in hex. Der erste Schritt beim Debuggen besteht darin, die Eingaben zu verifizieren. Machen Sie Code für den nächsten Reader und Debugger, lassen Sie den Compiler mit Optimierungen umgehen Die Zwischenvariable wird normalerweise während der Kompileroptimierung kombiniert. – zaph

Antwort

0

Schließlich fand ich eine Lösung:

für alle, die diese Bibliothek auf Android verwenden, schlage ich vor, diese Gabel zu verwenden, anstatt

https://github.com/lhunath/scrypt

Es ist ein voll Android NDK Projekt-Setup hat, die Sie gerade von der src/android/jni Ordner NDK-build ausführen müssen (Natürlich müssen Sie NDK richtig konfiguriert haben) und es wird eine funktionierende Menge von .so Dateien erzeugen.

HINWEIS: Sie haben die Application.mk Datei zu ändern, um sie für alle Plattformen

Verwandte Themen