Open
Description
new BouncyCastleProvider()
is very heavy, BouncyCastleProvider
should use as singleton, here is the simple benchmark test code:
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class Tt {
public static void main(String[] args) throws NoSuchAlgorithmException, InterruptedException {
long t1 = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
String digest = Base64.getEncoder().encodeToString(hash("test".getBytes(StandardCharsets.UTF_8)));
AssertUtil.isTrue("VeEukWUNL+xW7HTh0+Tdv84u86ZYkMKhns+IowfnaiM=".equals(digest));
}
System.out.println((System.currentTimeMillis() - t1) + " ms");
long t2 = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
String digest = Base64.getEncoder().encodeToString(hash2("test".getBytes(StandardCharsets.UTF_8)));
AssertUtil.isTrue("VeEukWUNL+xW7HTh0+Tdv84u86ZYkMKhns+IowfnaiM=".equals(digest));
}
System.out.println((System.currentTimeMillis() - t2) + " ms");
}
private static String HASH_SM3 = "SM3";
private static BouncyCastleProvider PROVIDER = new BouncyCastleProvider();
public static byte[] hash(byte[] raw) throws NoSuchAlgorithmException {
if (null == raw) {
return null;
}
BouncyCastleProvider provider = new BouncyCastleProvider();
MessageDigest digest = MessageDigest.getInstance(HASH_SM3, provider);
return digest.digest(raw);
}
public static byte[] hash2(byte[] raw) throws NoSuchAlgorithmException {
if (null == raw) {
return null;
}
MessageDigest digest = MessageDigest.getInstance(HASH_SM3, PROVIDER);
return digest.digest(raw);
}
}
Outputs:
2760 ms
4 ms
Metadata
Metadata
Assignees
Labels
No labels