DESFire中对于数据加密,有两种模式:
1. CBC发送模式(CBC Send Mode);
2. CBC接收模式(CBC Receive Mode)。
但是厂家文档中对这两种模式的具体操作没有进行详细的解释。
笔者通过查阅多个项目的源代码,现详细说明如下:
一、CBC发送模式
1. (输入数据的)第一个数据块,与IV进行异或;
2. 异或的结果进行ECB密码学运算(加密/解密),得到第一个数据块的输出;
3. 复制第一个数据块的输出到IV;
4. 第二个数据块,与IV进行异或(此时的IV是第一个数据块的输出);
5. 异或的结果进行ECB密码学运算(加密/解密),得到第二个数据块的输出;
6. 复制第二个数据块的输出到IV……以此类推。
二、CBC接收模式
1. 复制(输入数据的)第一个数据块到OV;
2. 第一个数据块进行ECB密码学运算(加密/解密);
3. 第一个数据块的密码学运算结果,与IV进行异或,得到第一个数据块的输出;
4. 将OV复制到IV;
5. 复制第二个数据块到OV;
6. 第二个数据块进行ECB密码学运算(加密/解密);
7. 第二个数据块的密码学运算结果,与IV进行异或,得到第二个数据块的输出(此时的IV是原始的第一个数据块);
8. 将OV复制到IV……以此类推