当前位置: 首页 > 知识库问答 >
问题:

使用智能卡私钥加密数据

越运锋
2023-03-14

我正在尝试在我的web应用程序中使用小程序来使用智能卡加密一些数据。我正在关注这个链接:http://www.developer.com/java/other/article.php/3587361/Java-Applet-for-Signing-with-a-Smart-Card.htm

我能够读取存储在智能卡中的证书,并使用证书加密数据。但它需要我传递PKCS#11实现库文件(.dll)和智能卡pin的位置。

我的功能要求是从连接到系统的单个(或多个)智能卡加载证书列表,而无需通过任何. dll文件路径。当然,当用户选择证书进行签名时,他/她将输入PIN。

是否可以在不传递PKCS#11实现库文件(.dll)的位置的情况下从智能卡提取证书详细信息

实施:

PKCS11LibraryFileAndPINCodeDialog localPKCS11LibraryFileAndPINCodeDialog = new PKCS11LibraryFileAndPINCodeDialog();

boolean bool;

try {
  bool = localPKCS11LibraryFileAndPINCodeDialog.run();

}
finally
{
  localPKCS11LibraryFileAndPINCodeDialog.dispose();
}
if (bool)
{
  String str2 = this.mSignButton.getLabel();
  this.mSignButton.setLabel("Working...");
  this.mSignButton.setEnabled(false);
  try
  {
    String str3 = localPKCS11LibraryFileAndPINCodeDialog.getLibraryFileName();
    String str4 = localPKCS11LibraryFileAndPINCodeDialog.getSmartCardPINCode();
    SmartCardSignerApplet.CertificationChainAndSignatureBase64 localCertificationChainAndSignatureBase641 = signDocument(arrayOfByte, str3, str4);
  }

共有2个答案

赵献
2023-03-14

对于那些在7年后登陆的浏览器,在2021或以后,对于现代浏览器,可以使用浏览器扩展,而浏览器扩展又使用本地主机应用程序访问本地证书存储,它使用CSP连接到智能卡,而不需要指定PKCS×11库。有关加密、解密和其他API,请参阅Stacks Overflow Answer。

郁宾鸿
2023-03-14

简短的回答是“不”当与智能卡交互时,Java只需将PKCS#11请求传递给实际与智能卡交互的. dll文件,因此您需要提供此. dll文件来与智能卡交互并读取证书。

你也许可以不用这个。dll文件,但我认为这相当于重写。自己编写dll代码。我的理解是,不同的智能卡有不同的API,并且。用于访问它们的dll文件提供了一个标准的PKCS#11 API,因此,用于智能卡访问的Java库不需要实现所有智能卡API,只需使用由提供的PKCS#11接口即可。dll文件。

 类似资料:
  • 并且我将这个函数称为用RSA公钥加密DSA密钥的函数:

  • 我试图通过RSA加密字符串。我也有java样本,但我不能正确地将其转换为c#。 RSA示例: 这是我在c#中生成的代码,但我的c#代码结果与javaCode结果不同。我的代码怎么了?

  • 我想使用带有RSA算法的OpenSSL使用私钥加密文件: 现在,如果我执行解密操作: 此操作需要私钥 我知道我应该使用公钥进行加密,如果我使用私钥,我会得到一个签名。 然而,我想这样做是为了学习。

  • 我正在编写一个Java程序,该程序使用USB证书(智能卡)进行加密和签名。我有一个共享库(Windows上为.dll,Linux上为.so),它为硬件实现PKCS11。 我正在搜索现有的解决方案,并找到以下指南http://docs.oracle.com/javase/7/docs/technotes/guides/security/p11guide.html指南建议使用sun。安全pkcs11.

  • 我需要在C#中加密数据,以便将其传递给Java。Java代码属于第三方,但我得到了相关的源代码,因此我决定,由于Java使用Bouncy Castle库,所以我将使用C#端口。 解密工作正常。但是,解密仅在使用私钥使用encrypt时有效,而不是使用公钥。使用公钥时,解密失败,出现。 编辑: 我还添加了一个单元测试,它证明公钥等于从私钥中提取的公钥:

  • 我在使用Java Bouncycastle的客户机和使用Python RSA库的密钥服务器之间交换私钥时遇到了困难。PEM格式用于通过REST传输密钥。keyserver无法解密我提供的密钥(加密密码更改时需要),它需要PKCS#1或PKCS#8密钥和PEM,如下所示: 但是BouncyCastle的输出(使用JCEpeEncryptorBuilder和JcaMiscPEMGenerator)的起