2017-02-28 51 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