2017-02-28 86 views
2

我想在Java Card版本2.2.1上实现RSA登录。我已经实现了RSA 2048并成功地进行了测试,但是当尝试使用MessageDigest类进行散列时,我无法得到正确答案。如何在Java Card 2.2.1上实现SHA256?

这里是我的代码:

MessageDigest md = MessageDigest.getInstance(MessageDigest.ALG_SHA, false); 
md.reset(); 
md.doFinal(toSign, bOffset, bLength, tempBuffer, (short) 0);` 

但我没有得到正确的答案; neelyher为ALG_SHA也不为ALG_MD5

我想知道问题出在哪里。我看到的所有样品都使用相同的方法和参数。

+1

我们需要完整的示例代码和您的测试来验证任何内容...... –

+2

除此之外,MessageDigest.ALG_SHA并非您的主题标题 –

+2

中建议的SHA256您可能想看看[这里](https: //www.fi.muni.cz/~xsvenda/jcalgtest/table.html)了解支持RSA2048和SHA256的卡片的一些摘要。支持SHA256的JC 2.2.1卡被标记为'可疑是'...祝你好运! – vlp

回答

4

Java Card 2.2.1规范不支持SHA-256(或任何其他SHA-2消息摘要)。它仅支持SHA1和MD5两种完全不同的加密散列函数。因此,MessageDigest.ALG_SHAMessageDigest.ALG_MD5都不会为您提供可以计算SHA-256散列函数的MessageDigest实例。

只有Java Card 2.2.2及以上版本支持各种SHA2功能。在该规范中,MessageDigest类也将支持

  • SHA-256:MessageDigest.ALG_SHA_256
  • SHA-384:MessageDigest.ALG_SHA_384
  • SHA-512:MessageDigest.ALG_SHA_512

所以如果你很幸运,你的卡实际上支持Java Card 2.2.2,你实际上可以使用这些常量来获得一个合适的MessageDigest对象。

如果你的显卡不支持的Java Card 2.2.2,然后,当然,你 不能使用 不应该能够使用这些常数。如果您的卡支持MessageDigest的某些专有实现(也支持SHA-256),您仍然可以检查卡的手册,但我非常怀疑这一点。



)由于vlp的指出,其实有一些是Java卡2.2.1(或低于卡)是看似支持使用常数推出SHA-2算法在Java Card 2.2.2 API中。这可能只是由其他实现错误引起的,没有人似乎已经测试过这些算法是否可以在这些卡上实际工作。有关这方面的发现,请参阅JCAlgTest list