繁体   English   中英

Java与SunPKCS11提供程序一起使用SecureRandom

[英]Java use SecureRandom with SunPKCS11 provider

我想将启用PKCS#11的设备用作SecureRandom的来源。

所以我做了以下工作:

Provider pkcs11provider = new sun.security.pkcs11.SunPKCS11(pkcs11config);
Security.addProvider(pkcs11provider);

byte[] rb = new byte[100];
SecureRandom sr = SecureRandom.getInstance("PKCS11", pkcs11provider);
sr.nextBytes(rb);

而且我总是有一个例外:

Exception in thread "main" java.security.NoSuchAlgorithmException: no such algorithm: PKCS11 for provider SunPKCS11-HSM
    at sun.security.jca.GetInstance.getService(GetInstance.java:101)
    at sun.security.jca.GetInstance.getInstance(GetInstance.java:218)
    at java.security.SecureRandom.getInstance(SecureRandom.java:383)

我做错了什么? 根据JDK PKCS#11参考指南, SecureRandom算法应支持"PKCS11"

“ PKCS11”听起来不像算法名称。 它是提供者名称。 提供者可以为特定的加密操作拥有自己的算法名称。 要查看它们具有的所有算法,可以运行此代码片段以查看它们。

Set<Provider.Service> services = pkcs11provider.getServices();

services.forEach(service ->
{
    // System.out.println(service.getType()); // --> Look for 'SecureRandom' type
    System.out.println(service.getAlgorithm());
});

查找“ SecureRandom”类型,这是您必须作为SecureRandom.getInstance(.., ..)的第一个参数传递的算法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM