📄 descheck.c
字号:
#include <stdio.h>
#include <io.h>
#include <dos.h>
#include <conio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#include "ansides.ch"
#define BIOS
#ifdef BIOS
#include <bios.h>
#define DATA_READY 0x100
enum HandShake {SOH = 0x01, STX = 0x02, ETX = 0x03, EOT = 0x04,
ENQ = 0x05, ACK = 0x06, NAK = 0x15, ESC = 0x1B};
#else
#define QSIZE 200
#include "queue.ch"
#include "commdrv.ch"
#endif
#define TOC 3
int Port, TempChar, Step, DataLen, Index;
unsigned char R_Data[1000], S_Data[1000], T_Data[1000],
DesKey[8], AKeyIndex, lrc;
unsigned char abMasterKey[8], abWorkingKey[8], abPinData[8], abPan[25], abPin[8];
unsigned char abWorkingBuf[8], abPinBuf[8], abBuffer[40], abKbdBuf[40];
struct date CDate;
struct time CTime;
time_t Time1, Time2;
const unsigned char AKey[10][8] = {
"\x46\x10\x48\x03\x42\x35\x17\x62",
"\x10\x16\x86\x74\x88\x41\x29\x47",
"\x57\x11\x38\x42\x34\x79\x62\x59",
"\x21\x26\x17\x12\x72\x85\x91\x60",
"\x68\x22\x55\x50\x18\x81\x23\x52",
"\x33\x27\x07\x27\x24\x19\x66\x66",
"\x70\x23\x55\x98\x69\x25\x98\x78",
"\x44\x21\x04\x66\x05\x23\x30\x50",
"\x81\x26\x56\x03\x41\x39\x63\x61",
"\x55\x22\x24\x74\x86\x68\x05\x86"
};
void split(unsigned char abTarget[], unsigned char abSource[], int wLen)
{
int i;
int bJ;
for (i = 0; i < wLen; i++) {
bJ = abSource[i] / 16;
if (bJ > 9)
abTarget[i*2] = bJ + 'A' - 10;
else
abTarget[i*2] = bJ + '0';
bJ = abSource[i] % 16;
if (bJ > 9)
abTarget[i*2+1] = bJ + 'A' - 10;
else
abTarget[i*2+1] = bJ + '0';
}
}
void compress(unsigned char abTarget[], unsigned char abSource[], unsigned int wLen)
{
unsigned int wI;
unsigned char bT1, bT2;
for (wI = 0; wI < wLen; wI++) {
bT1 = abSource[wI*2];
bT1 = (bT1 >= 'A') ? bT1-7 : bT1;
bT2 = abSource[wI*2+1];
bT2 = (bT2 >= 'A') ? bT2-7 : bT2;
abTarget[wI] = ((bT1&0x0f)<<4) | (bT2&0x0f);
}
}
void encrypt(void)
{
int bJ;
memset(abBuffer, '0', 16);
if (abPan[0] > 16) {
memcpy(&abBuffer[1], &abPan[abPan[0]-15], 15);
abBuffer[0] = abPan[abPan[0]];
} else {
memcpy(&abBuffer[17-abPan[0]], &abPan[1], abPan[0]-1);
abBuffer[0] = abPan[abPan[0]];
}
compress(&abBuffer[16], abBuffer, 8);
abBuffer[16] = 0;
abBuffer[17] = 0;
abBuffer[0] = 6;
memset(&abBuffer[1], 0xff, 7);
compress(&abBuffer[1], abPin, abBuffer[0]/2);
for (bJ = 0; bJ < 8; bJ++)
printf(" %02x", abBuffer[16+bJ]);
for (bJ = 0; bJ < 8; bJ++)
abBuffer[bJ+16] ^= abBuffer[bJ];
for (bJ = 0; bJ < 8; bJ++)
printf(" %02x", abBuffer[16+bJ]);
memcpy(abPinData, &abBuffer[16], 8);
des(abPinData, abPinBuf, abWorkingKey, 1);
printf("\nPin Data:\n");
for (bJ = 0; bJ < 8; bJ++)
printf("%02x ", abPinBuf[bJ]);
}
void unencrypt(void)
{
int bJ;
des(abPinBuf, abPinData, abWorkingKey, 0);
if (abPan[0] > 16) {
memcpy(&abBuffer[1], &abPan[abPan[0]-15], 15);
abBuffer[0] = abPan[abPan[0]];
} else {
memcpy(&abBuffer[17-abPan[0]], &abPan[1], abPan[0]-1);
abBuffer[0] = abPan[abPan[0]];
}
compress(&abBuffer[16], abBuffer, 8);
abBuffer[16] = 0;
abBuffer[17] = 0;
abBuffer[0] = 6;
/*
memset(&abBuffer[1], 0xff, 7);
compress(&abBuffer[1], abPin, abBuffer[0]/2);
*/
for (bJ = 0; bJ < 8; bJ++)
abBuffer[bJ+16] ^= abPinData[bJ];
memcpy(abPin, &abBuffer[16], 8);
}
void main(void)
{
int bJ;
unsigned char abPinData[8];
system("cls");
/****
des("\xFB\x73\xD5\x3C\x41\xF9\xCF\x8C", abBuffer, "\x11\x11\x11\x11\x11\x11\x11\x11",
0);
for (bJ = 0; bJ < 8; bJ++)
printf("%02x ", abBuffer[bJ]);
printf("\n");
des("\x13\xFC\xCA\xDD\x5D\xB0\x46\x50", &abBuffer[16], abBuffer, 1);
for (bJ = 0; bJ < 8; bJ++)
printf("%02x ", abBuffer[16+bJ]);
printf("\n\nPlease input card no len : ");
scanf("%d", &abPan[0]);
printf("Please input card no : ");
scanf("%s", &abPan[1]);
abPan[0] = 16;
memcpy(&abPan[1], "4580643022125969", 16);
printf("Please input pin : ");
scanf("%s", abPin);
printf("Please input master key(16) : ");
scanf("%s", abBuffer);
compress(abMasterKey, abBuffer, 8);
printf("Please input working key(16) : ");
scanf("%s", abBuffer);
compress(abWorkingBuf, abBuffer, 8);
memcpy(abMasterKey, AKey[0], 8);
memcpy(abWorkingBuf, "11111111", 8);
des(abWorkingBuf, abBuffer, abMasterKey, 0);
// des(abBuffer, abWorkingKey, abMasterKey, 0);
memcpy(abWorkingKey, abBuffer, 8);
encrypt();
printf("\nPin Data:\n");
for (bJ = 0; bJ < 8; bJ++)
printf("%02x ", abPinBuf[bJ]);
unencrypt();
printf("\nPin:\n");
for (bJ = 0; bJ < 8; bJ++)
printf("%02x ", abPin[bJ]);
*****/
printf("\n");
des("\xee\x0d\x09\xe1\xba\xe2\x30\x3e", abWorkingKey, "ricompos", 0);
// split(abBuffer, "\x89\x03\x3b\x47\x93\xee\xc1\x65", 8);
// des(abBuffer, abBuffer, abWorkingKey, 1);
// for(bJ=0;bJ<8;bJ++)
// abBuffer[bJ]^=abBuffer[8+bJ];
// des(abBuffer, abBuffer, abWorkingKey, 1);
// split(abKbdBuf, abBuffer, 8);
for (bJ = 0; bJ < 8; bJ++)
printf("%02x ", abWorkingKey[bJ]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -