scrypt
scrypt copied to clipboard
Difference between native and java implementation
When I use the native library to crypt an empty string ("") there is a result.
When I use the java code to crypt an empty string ("") I get the Exception
Exception in thread "main" java.lang.IllegalArgumentException: Empty key at java.base/javax.crypto.spec.SecretKeySpec.<init>(SecretKeySpec.java:95) at com.lambdaworks.crypto.SCrypt.scryptJ(SCrypt.java:87) at de.empic.scryptbug.Main.main(Main.java:19)
Example code to reproduce (on linux only): `import java.security.GeneralSecurityException; import java.security.SecureRandom;
import com.lambdaworks.crypto.SCrypt;
public class Main { private static final int CPU_COST = 16384; private static final int MEMORY_COST = 8; private static final int PARALLELIZATION = 1;
public static void main(String[] args) throws Exception { byte[] salt = new byte[16]; SecureRandom.getInstance("SHA1PRNG").nextBytes(salt); final byte[] emptyStringInBytes = "".getBytes("UTF-8"); try { byte[] resultJava = SCrypt.scryptJ(emptyStringInBytes, salt, CPU_COST, MEMORY_COST, PARALLELIZATION, 32); } catch (GeneralSecurityException e) { e.printStackTrace(); } try { byte[] resultNative = SCrypt.scryptN(emptyStringInBytes, salt, CPU_COST, MEMORY_COST, PARALLELIZATION, 32); } catch (Exception exception) { exception.printStackTrace(); } } }`