Bouncy castle HMAC 消息驗證碼

1、如果初始化的密鑰key長度小於加密塊的大小,比如sha1算法加密塊的大小是64字節,那麼構造一個inputPad數組,不足64字節的補零;如果key長度大於加密塊的大小,那麼使用digest將密鑰進行一次散列運算,取出運算的結果inputPad,在shal算法中,運算結果是20字節長度,不足64字節的補零。將inputPad備份一份outputPad。

2、將inputPad數組所有的字節與IPAD(0x36)進行異或運算,然後將運算的結果數組進行摘要操作。將outputPad數組的所有字節與OPAD(ox5c)進行異或運算

3、對簽名數據進行算列運算,即調用update方法

4、調用doFInal方法,

 byte[] tmp = new byte[digestSize];
        digest.doFinal(tmp, 0);

        digest.update(outputPad, 0, outputPad.length);
        digest.update(tmp, 0, tmp.length);

        int     len = digest.doFinal(out, outOff);

計算第二步和第三步的消息摘要結果存儲到tmp數組中,然後對outputPad數組進行散列運算,然後對tmp進行散列運算,最後對上面的兩種運算求出信息摘要

 

5、RSA簽名算法:

         其實就是使用私鑰進行加密,私鑰對同一個數據進行加密,產生的密文是一樣的,即簽名數據是一樣的。

        使用BC產生證書的時候,都使用org.bouncycastle.jce.provider.JDKDigestSignature摘要簽名類,而內部使用的是    public SHA256WithRSAEncryption()
        {
            super(NISTObjectIdentifiers.id_sha256, new SHA256Digest(), new PKCS1Encoding(new RSABlindedEngine()));
        }

        RSA的簽名算法。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章