当前位置:网站首页 > 技术博客 > 正文

c语言编写一个简单加密程序



对一个自己开发的程序进行加密,主要思路是先获取目标机器的机器码(mac地址或者cpu的序列号)。然后写一个简单的加密算法对机器码进行加密,并输出一个license文件。自己开发的程序就读取目标机器码,并读取license文件解码成机器码,看两者是否相符合,不符合则退出程序。这里只给了mac地址的代码,但是mac地址是可以伪装修改的,对于电脑不是唯一的安全性。用cpu序列号更好,可以自己百度下例子。

 

获得目标的mac地址

void GetMac(std::vector < std::string >& vMac)
{
    vMac.clear();
    char data[4096];
    ZeroMemory(data, 4096);
    unsigned long  len = 4000;
    PIP_ADAPTER_INFO pinfo = (PIP_ADAPTER_INFO)data;





    DWORD ret = GetAdaptersInfo(pinfo, &len);
    if (ret != ERROR_SUCCESS)
        return;

    while (pinfo)
    {
        if (pinfo->Type == MIB_IF_TYPE_ETHERNET)
        {
            char sbuf[20];
            std::string sret;
            for (int k = 0; k < 5; k++)
            {
                sprintf(sbuf, "%02X-", pinfo->Address[k]);
                sret += sbuf;
            }
            sprintf(sbuf, "%02X", pinfo->Address[5]);
            sret += sbuf;
            vMac.push_back(sret);
        }
        pinfo = pinfo->Next;
    }
}
















#define C1 52845
#define C2 22719
WORD key = 1314;
string Encrypt(string S, WORD Key) // 加密函数
{
    string Result, str;
    int i, j;





    Result = S; // 初始化结果字符串
    for (i = 0; i < S.length(); i++) // 依次对字符串中各字符进行操作
    {
        Result[i] = S[i] ^ (Key >> 8); // 将密钥移位后与字符异或
        Key = ((BYTE)Result[i] + Key)*C1 + C2; // 产生下一个密钥
    }
    S = Result; // 保存结果
    Result = ""; // 清除结果
    for (i = 0; i < S.length(); i++) // 对加密结果进行转换
    {
        j = (BYTE)S[i]; // 提取字符
        // 将字符转换为两个字母保存
        str = "12"; // 设置str长度为2
        str[0] = 65 + j / 26;//这里将65可以改为其他值,产生不同的效果,相应的,解密处要改为相同的数
        str[1] = 65 + j % 26;
        Result += str;
    }
    return Result;
}

string Decrypt(string S, WORD Key) // 解密函数
{
    string Result, str;
    int i, j;






















    Result.empty(); // 清除结果
    for (i = 0; i < S.length() / 2; i++) // 将字符串两个字母一组进行处理
    {
        j = ((BYTE)S[2 * i] - 65) * 26;//相应的,解密处要改为相同的数


        j += (BYTE)S[2 * i + 1] - 65;
        str = "1"; // 设置str长度为1
        str[0] = j;
        Result += str; // 追加字符,还原字符串
    }
    S = Result; // 保存中间结果
    for (i = 0; i < S.length(); i++) // 依次对字符串中各字符进行操作
    {
        Result[i] = (BYTE)S[i] ^ (Key >> 8); // 将密钥移位后与字符异或
        Key = ((BYTE)S[i] + Key)*C1 + C2; // 产生下一个密钥
    }
    return Result;
}











 

 

  • 上一篇: ipopt
  • 下一篇: 公式编辑器怎么破解
  • 版权声明


    相关文章:

  • ipopt2025-10-10 17:01:00
  • c程序括号匹配检查2025-10-10 17:01:00
  • c语言中malloc函数的用法2025-10-10 17:01:00
  • c语言跳表实现2025-10-10 17:01:00
  • 面向对象设计基本原理2025-10-10 17:01:00
  • 公式编辑器怎么破解2025-10-10 17:01:00
  • usb转ethernet 芯片2025-10-10 17:01:00
  • sql左外连接怎么写2025-10-10 17:01:00
  • 计算机系统的组成结构有哪些2025-10-10 17:01:00
  • rgb和rgbs2025-10-10 17:01:00