Javacard 发送 RSA Public 键入 APDU
Javacard send RSA Public Key in APDU
通过 APDU 发送 JavaCard RSAPublicKey 的好的解决方案是什么?
获取指数和模块并将它们打包成字节数组?
是的,您需要将指数和模数作为字节数组一起序列化发送。这两种方法可以解决您的问题:
//reads the key object and stores it into the buffer
private final short serializeKey(RSAPublicKey key, byte[] buffer, short offset) {
short expLen = key.getExponent(buffer, (short) (offset + 2));
Util.setShort(buffer, offset, expLen);
short modLen = key.getModulus(buffer, (short) (offset + 4 + expLen));
Util.setShort(buffer, offset + 2 + expLen, modLen);
return (short) (4 + expLen + modLen);
}
//reads the key from the buffer and stores it inside the key object
private final short deserializeKey(RSAPublicKey key, byte[] buffer, short offset) {
short expLen = Util.getShort(buffer, offset);
key.setExponent(buffer, (short) (offset + 2), expLen);
short modLen = Util.getShort(buffer, (short) (offset + 2 + expLen));
key.setModulus(buffer, (short) (offset + 4 + expLen), modLen);
return (short) (4 + expLen + modLen);
}
通过 APDU 发送 JavaCard RSAPublicKey 的好的解决方案是什么? 获取指数和模块并将它们打包成字节数组?
是的,您需要将指数和模数作为字节数组一起序列化发送。这两种方法可以解决您的问题:
//reads the key object and stores it into the buffer
private final short serializeKey(RSAPublicKey key, byte[] buffer, short offset) {
short expLen = key.getExponent(buffer, (short) (offset + 2));
Util.setShort(buffer, offset, expLen);
short modLen = key.getModulus(buffer, (short) (offset + 4 + expLen));
Util.setShort(buffer, offset + 2 + expLen, modLen);
return (short) (4 + expLen + modLen);
}
//reads the key from the buffer and stores it inside the key object
private final short deserializeKey(RSAPublicKey key, byte[] buffer, short offset) {
short expLen = Util.getShort(buffer, offset);
key.setExponent(buffer, (short) (offset + 2), expLen);
short modLen = Util.getShort(buffer, (short) (offset + 2 + expLen));
key.setModulus(buffer, (short) (offset + 4 + expLen), modLen);
return (short) (4 + expLen + modLen);
}