簡體   English   中英

Bouncy Castle輕量級API中的OCB模式

[英]OCB mode in Bouncy Castle Lightweight API

我有一個執行AES-256-OCB的Java應用程序。 為此,使用了BouncyCastle密碼庫。 照原樣,它使用標准的JCA接口,但這需要安裝特殊的策略文件,以允許密鑰大小大於128位。

這在我們的環境中不合適,在我看來,我們可以通過使用BouncyCastle自己的輕量級API來躲避它。 但是,我對此API感到有些困惑,我很好奇如何實際將密碼實例化為AES / OCB / NoPadding。

我通常對閱讀文檔非常了解,但是BouncyCastle的眾多選項使我有些困惑。

如何使用BouncyCastle輕量級API實例化沒有填充的256位OCB模式的BlockCipher對象,並使用它來加密和解密數據? 我已經有密鑰,IV和數據作為byte[]

這是我通過仔細閱讀BouncyCastle的測試代碼得出的。 盡管我沒有將結果與任何測試向量進行比較,但它似乎起作用。

調用用crypto = true進行加密,使用crypto = false進行解密。 將tagLen設置為AEAD標簽的所需長度(以位為單位)(例如tagLen = 128)。 (可選)將廣告設置為關聯數據以進行驗證,或將其留空以跳過。 返回生成的密文或純文本的適當大小的字節數組。

protected static byte[] processCipher(boolean encrypt, int tagLen, byte[] keyBytes, byte[] iv, byte[] in, byte[] ad) throws IllegalStateException, InvalidCipherTextException {
    KeyParameter key = new KeyParameter(keyBytes);
    AEADParameters params = new AEADParameters(key, tagLen, iv);
    AEADBlockCipher cipher = new OCBBlockCipher(new AESEngine(), new AESEngine());
    cipher.init(encrypt, params);

    byte[] out = new byte[cipher.getOutputSize(in.length)];
    if(ad != null) cipher.processAADBytes(ad, 0, ad.length);
    int offset = cipher.processBytes(in, 0, in.length, out, 0);
    offset += cipher.doFinal(out, offset);

    return out;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM