7

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

这是我现在拥有的代码:

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();

这很好用,但是在运行最后一行时,我会弹出一个询问密码的窗口。我该如何防止呢?

4

3 回答 3

5

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

假定必须提供密码的应用程序支持兼容模式。它允许(但忽略)非空密码。该模式默认启用。(1)

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

于 2009-01-30T15:00:27.550 回答
0

我的猜测是Windows正在弹出弹出窗口。

使用证书导入向导再次导入您的密钥,但请确保您没有选中“密码”屏幕上的以下选项。

[_] 启用强大的私钥保护。如果启用此选项,则每次应用程序使用私钥时都会提示您。

于 2009-01-30T13:31:59.007 回答
-1

我解决了这个问题,设置提供者如下:

signeData = gen.generate(content, ks.getProvider());

在哪里

ks是一个KeyStore

gen是一个CMSSignedDataGenerator

于 2014-04-30T18:12:47.820 回答