SCrypt дает другой результат на платформе x64

Я использую эту библиотеку https://github.com/wg/scrypt в своем приложении для Android. Я могу успешно скомпилировать его и связать нативную реализацию в своем приложении для Android, но функция scryptN дает другой результат, если она выполняется в 32-битной или 64-битной среде, как это возможно? Вместо этого реализация Java хорошо работает в обеих средах.

Чтобы воспроизвести проблему, просто соберите общие библиотеки с помощью 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-битной архитектуре.

Спасибо


person Apperside    schedule 17.07.2017    source источник
comment
Примеры кода и пример ввода/вывода?   -  person zaph    schedule 17.07.2017
comment
Хотя может быть очень легко собрать все вызовы в один беспорядок, отладить практически невозможно. Разбейте вызовы plainPassword.getBytes и theseed".getBytes на промежуточные переменные и проанализируйте их в шестнадцатеричном виде. Первым шагом в отладке является проверка входных данных. Сделайте код для следующего читателя и отладчика, позвольте компилятору заниматься оптимизацией, промежуточные переменные обычно объединяются во время оптимизации компилятора.   -  person zaph    schedule 18.07.2017


Ответы (1)


Наконец я нашел решение:

для тех, кто использует эту библиотеку на Android, я предлагаю вместо этого использовать эту вилку

https://github.com/lhunath/scrypt

Он имеет полную настройку проекта Android ndk, вам просто нужно запустить ndk-build из папки src/android/jni (конечно, вам нужно правильно настроить NDK), и он сгенерирует рабочий набор файлов .so.

ПРИМЕЧАНИЕ: вам нужно изменить файл Application.mk, чтобы сгенерировать их для всех платформ.

person Apperside    schedule 18.07.2017