Java 安全性 - MSCAPI 提供程序 : How to use without password popup?

标签 java security cryptography cryptoapi

我已经设法使用 Sun's MSCAPI provider在我的申请中。我现在遇到的问题是它总是弹出一个窗口,要求输入密码,即使我已经在代码中提供了它。这是个问题,因为我需要网络服务中的加密功能。

这是我现在的代码:

String alias = "Alias to my PK";
char[] pass = "MyPassword".toCharArray();

KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, pass);
Provider p =  ks.getProvider();

Signature sig = Signature.getInstance("SHA1withRSA",p);
PrivateKey key = (PrivateKey) ks.getKey(alias, pass)

sig.initSign(key);
sig.update("Testing".getBytes());
sig.sign();

这很好用,但是当最后一行运行时,我收到一个弹出窗口,要求输入密码。我该如何防止这种情况发生?

最佳答案

MSCAPI 提供程序不支持向 CAPI 提供密码:

A compatibility mode is supported for applications that assume a password must be supplied. It permits (but ignores) a non-null password. The mode is enabled by default. (1)

要通过CAPI 设置密码,必须调用CryptSetKeyParam使用未记录的 KP_KEYEXCHANGE_PIN 或 KP_SIGNATURE_PIN 并希望您的底层硬件 token 提供商支持它。 (它们并非完全未记录 - Windows CE 和 Windows Mobile 的文档提到它们 (2) 并且它们包含在头文件中)。

关于Java 安全性 - MSCAPI 提供程序 : How to use without password popup?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/495392/

相关文章:

java - 如何解密密文分区 - AES、Java

c - 通过 C 中的文件使用 crypt 函数进行身份验证(段错误)

javascript - Nodejs crypto.pbkdf2 结果不同于 CryptoJS.PBKDF2

java - Spring 启动: Configuration Scan missing classes due to "weird" setup

php - 如何安全地将 apiKey/客户端密码从 AngularJS 传递到 REST API

iphone - iOS 加密以安全地使用网络数据

javascript - 'unsafe-inline' 'unsafe-eval' 的 CSP 安全使用

java - 将字符串值列表传递给参数化的 JUnit 测试

java - 嵌入式 XSD 中的 JAXB 绑定(bind)

java - 在不使用线程的情况下实现此寻路代码的好方法是什么?