Discuss / Java / BouncyCastleProvider 提供了md5工具,但是引用的话,如果加密算法名称相同,使用的是第三方的还是jdk的?

BouncyCastleProvider 提供了md5工具,但是引用的话,如果加密算法名称相同,使用的是第三方的还是jdk的?

Topic source
 public static void main(String[] args) throws Exception {
        // 注册BouncyCastle:
        Security.addProvider(new BouncyCastleProvider());
        // 按名称正常调用:
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update("HelloWorld".getBytes("UTF-8"));
        byte[] result = md.digest();
        System.out.println(new BigInteger(1, result).toString(16));
    }
 // 创建一个MessageDigest实例:
        MessageDigest md = MessageDigest.getInstance("MD5");
        //MessageDigest md = MessageDigest.getInstance("SHA-1");
        //MessageDigest md = MessageDigest.getInstance("SHA-512");
        System.out.println(md.getDigestLength());
        // 反复调用update输入数据:
        md.update("Hello".getBytes("UTF-8"));
        //md.update("World".getBytes("UTF-8"));
        byte[] result = md.digest(); // 16 bytes: 68e109f0f40ca72a15e05cc22786f8e6
        System.out.println(Arrays.toString(result));
        System.out.println(Integer.toHexString(result[0]));
        System.out.println(Integer.toHexString(result[1]));
        System.out.println(new BigInteger(1, result).toString(16));

        MessageDigest md = MessageDigest.getInstance("MD5");

通过同样的名称获取的工具,使用的是哪个呢?

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

去bc的md5打个断点,或者单步跟踪执行update()看看

跟踪过了,进了jdk的DigestBase方法。

使用下边代码可以进BouncyCastle的。

package demo.encrypt;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.digests.MD5Digest;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.Security;
/**
 * 引入第三方加密jar包
 */
public class TestBouncyCastle {
    public static void main(String[] args) throws Exception {
        // 注册BouncyCastle:
        Security.addProvider(new BouncyCastleProvider());
        // 按名称正常调用:
        // 按名称正常调用:
        MD5Digest md = new MD5Digest();
        byte[] bytes = "HelloWorld".getBytes("UTF-8");
        md.update(bytes,0,bytes.length);
        byte[] result = new byte[md.getDigestSize()];
        md.doFinal(result, 0);
        System.out.println(new BigInteger(1, result).toString(16));
    }
}

基于jdk1.8

bcprov-jdk18on 1.77


  • 1

Reply