static void clientgenAnswer (const char * const inn, const char * const reg_key, char * const answer) {
char salt[]="$1$........";
size_t l=strlen(inn);
memcpy(salt+3, inn+l-8, 8);
char *tmp=crypt(reg_key, salt);
memcpy(answer, tmp+12, strlen(tmp)-12);
}

#include <assert.h>
#include <crypt.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
static int clientCheckINN (const char *inn, const char *hwserial) {
static const char *salt="$1$SBALIBAL";
char *tmp=crypt(inn, salt);
unsigned char result[23];
assert(strlen(tmp)-12==sizeof(result)-1);
memcpy(result, tmp+12, strlen(tmp)-12);
result[22]='\0';
return strcmp(result, hwserial);
}
static void clientgenAnswer (const char * const inn, const char * const reg_key, char * const answer) {
char salt[]="$1$........";
size_t l=strlen(inn);
memcpy(salt+3, inn+l-8, 8);
char *tmp=crypt(reg_key, salt);
memcpy(answer, tmp+12, strlen(tmp)-12);
}
__attribute ((noreturn))
static void bailout (void) {
fprintf(stderr, "usage: p2kg INN HWSERIAL\n");
exit(1);
}
int main (const int argc, const char **argv) {
if (argc!=3) bailout();
const char *inn=argv[1];
if (strlen(inn)!=23) {
fprintf(stderr, "INN length wrong\n");
bailout();
}
const char *hwserial=argv[2];
if (strlen(hwserial)!=22) {
fprintf(stderr, "HD serial length wrong\n");
bailout();
}
if (clientCheckINN(inn, hwserial)) {
fprintf(stderr, "INN invalid\n");
bailout();
}
char answer[23];
clientgenAnswer(inn, hwserial, answer);
printf("%s\n", answer);
return 0;
}
далее смотрим по алгоритму и проверяем.oid *memcpy(void *dst, const void *src, size_t n);
где:
* dst — адрес буфера назначения
* srс — адрес источника
* n — количество байт для копирования
Функция копирует n байт из области памяти, на которую указывает src, в область памяти, на которую указывает dst. Функция возвращает адрес назначения dst.
char salt[]="$1$........";
size_t l=strlen(inn);
memcpy(salt+3, inn+l-8, 8);
char *tmp=crypt(reg_key, salt);
memcpy(answer, tmp+12, strlen(tmp)-12);
. <?php
$salt = "$1$........";
$inn = '7583904938471263857648';
$l=strlen($inn)-8;
$salt = str_replace(substr($salt, 2, 1), substr($inn,$l), $salt);
print $salt;
$tmp=crypt($reg_key, $salt);
$l=strlen($tmp)-12;
$key=substr($tmp,$l);
echo "<br>";
echo $key;
?>
не можно а нужноможно сделать программу, скомпилировав твой с++-код. и вызывать ее из php с помощью system