C代码
void CreateMac(char *pchMessage)//【pchMessage =0000741000000000131021010001 0000000092010/02/2110:27:4500000001000000000000】
{
char mac[9];
char tmpbuf[1024];
sprintf(tmpbuf, "%-72.72s%-s", pchMessage, pchMessage+80);//
CreateSecret(mac, tmpbuf);//CreateSecret计算MAC算法
memcpy(pchMessage+72, mac, 8);//把MAC添加到指定的位置
}
void CreateSecret(char *pchMac, char *pchFmt, ...)
{
int len, i;
unsigned char buf[9],w[1024];
va_list ap; va_start(ap, pchFmt);
vsprintf((char *)w,pchFmt,ap);
va_end(ap); len = strlen((char *)w);
if(len <= 8)
{
strcat((char *)w, "12345678");
len += 8;
}
strcpy((char *)buf,"abcdefgh");
for(i = 0; i < len; i++)
buf[i%8]+=i*w[i]%97+i;
for(i = 0; i < 8; i++)
{
buf[i] = buf[i] > 0 ? buf[i] : -buf[i];
buf[i]=buf[i]%126+1;
if(buf[i]<33)
buf[i]+=33+i*7;
if(buf[i]=='|')
buf[i]=126-i;
}
buf[8] = 0;
strcpy(pchMac,(char *)buf);
}void CreateSecret(char *pchMac, char *pchFmt, ...)转成delphi7的代码非常感谢.
void CreateMac(char *pchMessage)//【pchMessage =0000741000000000131021010001 0000000092010/02/2110:27:4500000001000000000000】
{
char mac[9];
char tmpbuf[1024];
sprintf(tmpbuf, "%-72.72s%-s", pchMessage, pchMessage+80);//
CreateSecret(mac, tmpbuf);//CreateSecret计算MAC算法
memcpy(pchMessage+72, mac, 8);//把MAC添加到指定的位置
}
void CreateSecret(char *pchMac, char *pchFmt, ...)
{
int len, i;
unsigned char buf[9],w[1024];
va_list ap; va_start(ap, pchFmt);
vsprintf((char *)w,pchFmt,ap);
va_end(ap); len = strlen((char *)w);
if(len <= 8)
{
strcat((char *)w, "12345678");
len += 8;
}
strcpy((char *)buf,"abcdefgh");
for(i = 0; i < len; i++)
buf[i%8]+=i*w[i]%97+i;
for(i = 0; i < 8; i++)
{
buf[i] = buf[i] > 0 ? buf[i] : -buf[i];
buf[i]=buf[i]%126+1;
if(buf[i]<33)
buf[i]+=33+i*7;
if(buf[i]=='|')
buf[i]=126-i;
}
buf[8] = 0;
strcpy(pchMac,(char *)buf);
}void CreateSecret(char *pchMac, char *pchFmt, ...)转成delphi7的代码非常感谢.
va_start va_end是读取参数
strcat strcpy strlen是字符串处理函数
还有些指针,慢慢写。
procedure CreateSecret(pchMac:pchar;pchFmt:pchar);
var len, i:integer;
buf:array [0..8] of char;
w:array [0..1023] of char;
ap:va_list;
begin
va_start(ap, pchFmt);
vsprintf(pchar(@w[0]),pchFmt,ap);
va_end(ap);len := strlen(pchar(@w[0]));
if(len <= 8) then
begin
strcat(pchar(@w[0]), '12345678');
len :=len+ 8;
end;
StrCopy(pchar(@buf[0]),'abcdefgh');
for i:=0 to len-1 do
buf[i mod 8] := buf[i mod 8] + i*w[i] mod 97+i;
for i:= 0 to 8-1 do
begin
if buf[i]>0 then
begin end
else
buf[i]:= -buf[i];
buf[i]:=buf[i] mod 126+1;
if(buf[i]<33) then
buf[i]:=buf[i]+33+i*7;
if(buf[i]='|') then
buf[i]:=126-i;
end;
buf[8] := 0;
strcpy(pchMac,PChar(@buf[0]));
end;