1,在本文中,我试图将算法中经典的动态规划设计用于软件加密,可结合其他加密算法共同使用。
2,以C++实现,不进行API调用,主要关注算法在软件保护方面的灵活运用。
3,欢迎各位进行破解尝试,源代码附有示例姓名与序列号。
4,原创拙作,水平有限,欢迎各位给予指点。
Green Tsai
代码:
/*
Name: 动态规划算法用于软件加密初探(1)
Copyright: @Green Tsai
Author: Green Tsai
Date: 04-03-10 12:11
Description:
1,思路与想法:本程序试图将动态规划算法用于软件加密,并用动态规划中最经典的LIS(Longest Increasing Subsequence)
问题作一示例。
2,对软件进行非明码比较加密,避免一般的逆向破解。
3,示例姓名:kanxue,序列号:xbayczhfea80。
*/
#include <cstdlib>
#include <iostream>
using namespace std;
int Solve(char *a,int n);
bool CheckName(char *name,int len);
bool CheckSerial(char *serial,int len);
bool CheckLen(int a,int b);
int main(int argc,char *argv[])
{
bool ok=false;
while(ok==false)
{
char name[30],serial[30];
cout<<"Please input your name:"<<endl;
cin>>name;
cout<<"Please input your serial number:"<<endl;
cin>>serial;
int x=Solve(name,strlen(name));
int y=Solve(serial,strlen(serial));
// cout<<"strlen:"<<strlen(name)<<" "<<strlen(serial)<<endl;
// cout<<x<<" "<<y<<endl;
if(CheckName(name,strlen(name)) && CheckSerial(serial,strlen(serial)) && (2*strlen(name)==strlen(serial)) && (x==y) && (x>=3))
{
ok=true;
cout<<"Congratulations!"<<endl;
cout<<endl;
}
else
{
cout<<"Sorry!"<<endl;
cout<<endl;
}
}
system("PAUSE");
return 0;
}
int Solve(char *a,int n)
{
int dp[30];
dp[0]=1;
int ans=0;
for(int i=1;i<n;i++)
{
int max=0;
for(int j=0;j<i;j++)
{
if(a[i]>=a[j] && max<dp[j])
max=dp[j];
}
dp[i]=max+1;
if(ans<dp[i])
ans=dp[i];
}
return ans;
}
bool CheckName(char *name,int len)
{
if(len>=3 && len<=10)
return true;
else
return false;
}
bool CheckSerial(char *serial,int len)
{
if(len>=6 && len<=20)
return true;
else
return false;
}
您们搞破解,我来学加密。