QQ登录

只需要一步,快速开始

APP扫码登录

只需要一步,快速开始

手机号码,快捷登录

泡泡马甲APP 更多内容请下载泡泡马甲手机客户端APP 立即下载 ×
查看: 685|回复: 0

[C/C++/Qt] 带混淆的本地验证算法

[复制链接]

等级头衔

积分成就    金币 : 2806
   泡泡 : 1516
   精华 : 6
   在线时间 : 1244 小时
   最后登录 : 2024-5-5

丰功伟绩

优秀达人突出贡献荣誉管理论坛元老

联系方式
发表于 2023-5-7 08:47:48 | 显示全部楼层 |阅读模式
算法依据当前系统时间的月和日来校验,只不过带了很多垃圾字符混淆,详细逻辑看代码逻辑与注释。
; }+ Z7 X+ b: T& B" w4 R
  1. #define  _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <windows.h>
  4. #include <random>
  5. #include <chrono>
  6. #include <ctime>
  7. #include <string>
  8. #include <fstream>
  9. using namespace  std;
  10. //约定源验证位置
  11. #define CHECK_FLAG 325
  12. //密文生成长度
  13. #define PWD_LENTH 1000
  14. int main()
  15. {
  16.     //生成随机数种子
  17.     random_device rd;  // 用于获取随机种子
  18.     mt19937 gen(rd()); // 使用Mersenne Twister 19937算法作为随机数生成器
  19.     uniform_int_distribution<int> dis(0, 78); // 定义一个产生0到99之间均匀分布的整数的随机数分布器
  20.     //生成密码表
  21.     unsigned char passtable[80] = { 0 };
  22.     int j = 0;
  23.     for (int i = 48 ;i<128; i++) {
  24.         passtable[j] = i;
  25.         j++;
  26.     }
  27.     //生产PWD_LENTH位随机密码字符
  28.     unsigned char password[PWD_LENTH] = { 0 };
  29.     for (int i = 1; i < PWD_LENTH; i++) {
  30.         password[i] = passtable[dis(gen)];
  31.     }
  32.     //约定第CHECK_FLAG=325位为起源验证字节
  33.     //获取当前系统时间的月的第一位,号的第一位分别转为字符作为核心验证字节
  34.     //325位的ascll码存了月的第一位存在位置,月所在位置的下一位又存了号的第一位所存在的位置
  35.     chrono::system_clock::time_point now = chrono::system_clock::now();
  36.     time_t time = chrono::system_clock::to_time_t(now);
  37.     tm local_time = *localtime(&time);
  38.     int month = local_time.tm_mon + 1;  // 获取当前月份,并加1(因为tm_mon的取值范围是0-11)
  39.     int day = local_time.tm_mday;
  40.     char month_digit = to_string(month).c_str()[0];
  41.     char day_digit = to_string(day).c_str()[0];
  42.     int month_loc = password[CHECK_FLAG];
  43.     password[month_loc] = month_digit;
  44.     int day_loc = password[month_loc + 1];
  45.     password[day_loc] = day_digit;
  46.     //将密文写出为password.txt
  47.     fstream pwdtxt;
  48.     pwdtxt.open("password.txt", ios::binary |ios::out);
  49.     for (int i = 0; i< PWD_LENTH; i++) {  // 循环写入字符
  50.         pwdtxt.put(password[i]);
  51.     }
  52.     pwdtxt.close();
  53. }
生成密文:) q- ], a- @9 d  h5 S) r# c& L
1.jpg
& w0 E( O8 }0 y* \+ S( s5 g
2.jpg 7 U# s# \9 I: O/ S  V; d9 o
可以根据上述的代码写出应用端的校验,也可以根据自己的需求改。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|paopaomj.COM ( 渝ICP备18007172号 )

GMT+8, 2024-5-17 08:12

Powered by paopaomj X3.4 © 2016-2024 sitemap

快速回复 返回顶部 返回列表