Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Java implementation of scrypt
Java C
tree: a43d25c78a

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.


Java Implementation of scrypt

  A pure Java implementation of the scrypt key derivation function,
  and JNI bindings for the SSE-optimized C implementation.

  The Java implementation is based in large part on Colin Percival's
  reference implementation contained in
  scrypt-1.1.6/lib/crypto/crypto_scrypt-ref.c, but any errors in this
  port are solely the fault of its author, Will Glozer.


  com.lambdaworks.crypto.SCryptUtil implements a modified version of MCF,
  the modular crypt format, similar to the one used for storage of Unix
  passwords in the MD5, SHA-256, and bcrypt formats.

    SCryptUtil.scrypt(passwd, N, r, p)
    SCryptUtil.check(passwd, hashed)

  The output of SCryptUtil.scrypt is a string in the modified MCF format:


  s0     - version 0 of the format with 128-bit salt and 256-bit derived key
  params - 32-bit hex integer containing log2(N) (16 bits), r (8 bits), and p (8 bits)
  salt   - base64-encoded salt
  key    - base64-encoded derived key



    passwd = "secret"
         N = 16384
         r = 8
         p = 1

Maven Artifacts

  Releases containing the pure Java implementation, as well as native libraries
  for a limited number of platforms, are available in the maven central repository.


Native Code Implementation

  The native/ directory contains the SSE-optimized C implementation of scrypt
  along with JNI bindings and can be built with the usual autotools
  ./configure && make

  When the native library can be loaded it will be used instead of the pure
  Java implementation.


  A precompiled native library for Android 2.3 running on ARMv7 is located in
  src/android/resources/lib/arm7/ If placed in your .apk file's
  lib/{armeabi,armeabi-v7a} directory it will be automatically loaded.
Something went wrong with that request. Please try again.