首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java使用带有SunPKCS11提供程序的SecureRandom

Java使用带有SunPKCS11提供程序的SecureRandom
EN

Stack Overflow用户
提问于 2018-02-07 15:19:24
回答 1查看 663关注 0票数 1

我想使用我的支持PKCS#11的设备作为SecureRandom的来源。

因此,我做了以下工作:

代码语言:javascript
复制
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);

我总是会得到一个异常:

代码语言:javascript
复制
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"算法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-07 23:23:06

"PKCS11“听起来不像是算法的名字。它是提供程序的名称。对于特定的加密操作,提供程序可以有自己的算法名称。要查看它们拥有的所有算法,您可以运行以下代码片段来查看它们。

代码语言:javascript
复制
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(.., ..)中的第一个参数传入的算法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48658031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档