1

我目前正在开发一个 JavaCard 项目(v.2.2.2),我需要使用平方根、对数等来计算值......

我知道Math该类在 JavaCard API 中不可用,并且想知道是否存在另一个提供此类操作的库?

而且我不能使用double值,但我需要。有没有办法double在 JavaCard API 中表示一个值并执行操作(例如 log、sqrt 等)?

任何帮助表示赞赏!

4

2 回答 2

1

javacard 2.2.2 仅支持 boolean、byte、short 和可选的 int。如果您真的需要执行数学,那么您需要使用棘手的方法创建自己的课程,当然结果并不精确。

最佳实践是卡只存储数据并进行简单的计算/加密,服务器/终端端计算复杂的东西。在卡中存储双精度的解决方法是使用字节数组。

于 2013-05-23T11:19:29.323 回答
1

自 2.2.2 以来,JavaCard API 中有javacardx.framework.math包,但功能有限(仅加、减、乘)。但是,物理卡经常不支持,即使支持,它也可能只有 8 个字节长

JCAlgTest现在还提供所有 JavaCard 包的结果,包括数据库中卡片支持的所有版本(包括 javacardx.framework.math)。

或者,您可以考虑尝试JCMathLib library。该库仅使用公共 JC API 调用来为 BigInteger 提供任意长度(以及 ECPoint 操作),并且是旧版BigNat 库的改进版本。它将消耗大约 1KB 的 RAM,并且需要支持 ECC 的卡(如果您喜欢使用 ECPoint,仅 BigInteger 不需要它)。该实现仅部分在硬件中完成(使用 RSA 和 ECC 协处理器),部分在软件中完成,因此对侧信道和故障诱导攻击的抵抗力较差。

于 2018-12-05T09:03:29.377 回答