与 DESfire EV1 标签交互时,AES-CBC 用于保护通信。加密并发送消息后,需要使用加密产生的 IV 对响应进行解密:
Cipher c = Cipher.getInstance("AES/CBC/NoPadding");
c.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(zeroBytes));
byte[] encrypted_response = transceive(c.doFinal(message));
// TODO: cipher needs to be re-set to DECRYPT_MODE while retaining the IV
c.init(Cipher.DECRYPT_MODE, ...?);
byte[] response = c.doFinal(encrypted_response);
不幸的是,Cipher.getIV() 返回初始 IV(全为零),似乎没有办法让 IV 缺少手动实现整个 CBC 部分。在加密字节后从密码获取更新的 IV中提出了一个类似的问题,但是只提供了特定于 CTR 的解决方案,这些解决方案不适用于 CBC 模式。