private void autoResponse(byte[] data) { if (data[0] == 0x67) { uint seed = 0; byte level; uint key = 0; if (data.Length == 4) { seed = (uint)data[2] << 8 | (uint)data[3]; } else if (data.Length == 6) { seed = (uint)data[2] << 24 | (uint)data[3] << 16 | (uint)data[4] << 8 | (uint)data[5]; } level = data[1]; if (seed != 0 && level % 2 != 0) { key = securityDriver.UdsCallback_CalcKey(seed, level); if (data.Length == 4) { key &= 0xFFFF; driverTrans.CanSendString("27" + (level + 1).ToString("x2") + key.ToString("x4")); } else if (data.Length == 6) { driverTrans.CanSendString("27" + (level + 1).ToString("x2") + key.ToString("x8")); } } } }