我正在尝试使用我的Android应用程序验证DESFire卡.我使用此链接中的示例来解析我从卡中获得的字节.为此,我在解密中排除了填充(在下面说明),因为DESFire文档指出了它.此外,如果我不这样做,解密将返回7个字节,输入8个字节.以下是我使用的DES和TripleDES解密函数:
public static byte[] TripleDES_Decrypt(byte[] data,byte[][] keys)
{
int i;
byte[] tmp = new byte[data.length];
byte[] bloc = new byte[8];
K = generateSubKeys(keys[0]);
K1 = generateSubKeys(keys[1]);
K2 = generateSubKeys(keys[2]);
for (i = 0; i < data.length; i++) {
if (i > 0 && i % 8 == 0) {
bloc = encrypt64Bloc(bloc,K2, true);
bloc = encrypt64Bloc(bloc,K1, false);
bloc = encrypt64Bloc(bloc,K, true);
System.arraycopy(bloc, 0, tmp, i - 8, bloc.length);
}
if (i < data.length)
bloc[i % 8] = data[i]; …Run Code Online (Sandbox Code Playgroud)