java - 如何使用我们在SD卡中创建的 key (符合全局平台的智能卡)

标签 java cryptography key smartcard javacard

我实际上正在做一个项目,使用SD卡(使用java卡技术的智能卡)来实现一些功能,例如:与另一张卡(客户端)进行相互身份验证。所以我写了一些java卡小程序,但现在我有一个问题:

从卡规范或全局平台规范的那些引用文献中,我没有找到一种方法来重用卡上的 key (不是在卡外创建 key 存储库), 首先我试图在api dispo中找到一些方法,但我没有找到;那么事实上我必须在java卡小程序中编写程序,那么我如何检索/访问/使用卡上现有的键集;为了在身份验证中使用加密?

有人可以帮忙吗?

最佳答案

只需将 key 保存到小程序中的变量中即可。默认情况下,所有变量都是持久的。

您当然可以实现导入/导出功能,允许在小程序安装后将现有 key 对安装到小程序中。

更新

不要处理安全域 - 如果您想从小程序内访问 key ,请将其存储在内部。

例如,使用 RSA key ,您可以逐字段导入它(例如 RSA 公钥的模数和指数)。为了导入,您必须将所有内容传输为 byte[] 形式。然后可以使用一个或多个 APDU 将字节数组传输到卡中。如果字节数组对于一个 APDU 的有效负载数据来说太长,则需要多个 APDU。

一旦您传输了指数或模数的数据,您就可以创建公钥实例,然后设置它的组件。

RSAPublicKey pub = KeyBuilder.buildKey(ALG_RSA, LENGTH_RSA_1024);
pub.setExponent(...);
pub.setModulus(...);

如果将创建的 RSAPublicKey 实例保存在小程序类的字段变量中,则可以确保该实例已永久保存。

您可以使用相同的方式创建私钥和其他加密算法的 key 。

关于java - 如何使用我们在SD卡中创建的 key (符合全局平台的智能卡),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11242155/

相关文章:

java - (Java) try catch 特定代码行与 try catch 整个函数

mysql - BLOB/TEXT 列 'bestilling' 用于没有 key 长度的 key 规范

java - 如何在 Spring 3.1 中从多个参数生成自定义键以进行缓存抽象?

cryptography - 请解释一下 Merkle–Hellman 背包密码系统的代码?

python - Wxpython,如何使用给定的按键代码创建wx.KeyEvent?

gitlab - 如何从java api推送到gitlab

java - BigInteger 分成几部分

java - 如何摆脱 InvalidClassException SerialVersionUID?

swift - Xcode Commoncrypto 生成 key 对(私钥和公钥)

c++ - MingW 缺少 Win32 Crypto API 中的一些功能