加密算法和校验算法的注册机方式方式方式

加密算法作用:

选择好的加密算法和软件验证方式,会使得破解软件变得非常困难。如果加密算法和验证方式选择不当,软件会更容易被破解。因此,选择合适的加密算法和验证方法更为重要。

写在前面的话

常用的算法有Hash算法、对称算法(可分为分组算法和流算法)、非对称算法(公钥算法)。哈希算法是不可逆算法,如MD5等;对称算法是单密钥算法密码学算法 大数问题,可以加解密,如DES算法等;公钥算法是一种双密钥算法,公钥算法,私钥是一种算法,类似于RSA算法。

注册码对比分为明码和非明码对比。清晰的代码比较意味着在内存中可以直接看到真假注册码。不清晰的比较指针注册码在内存中是不可见的。

对称算法采用了非明码比对的方法,在一定程度上增加了破解难度,但只要破解者分析是哪个算法密码学算法 大数问题,然后找到key,就可以轻松写出注册机,所以使用对称算法并不是最有效的。理想的。RSA使用公钥加密和私钥解密两个密钥,其解密难度基于大数的分解。而且RSA是一种非对称算法,即使和自己软件使用的RSA有相同的源码,在密钥未知的情况下也很难做注册机。对 RSA 算法最有效的攻击是分解 N 以获得解密密钥。使用RSA算法时,需要增加模数的位数。

使用软件中的SHA算法验证注册码是否正确的方法如下:

if RSADecrypt(注册码,公钥,模数)=用户名 then  
begin  
  MessageBox(Handle,'注册成功','提示',MB_OK);  
end  
else  
 MessageBox(Handle,'注册失败','提示',MB_OK);  

示例代码如下:

function HexToInt(Hex:String):Integer;
var
  I,Res:Integer;
  ch:Char;
begin
    Res:= 0;
    for I := 0 to Length(Hex) do
      begin
        ch:=Hex[I+1];
        if (ch>=0) and (ch<='9') then
            Res := Res * 16 + Ord(ch) - Ord('0')
        else if (ch>='A') and (ch <= 'F') then
            Res := Res * 16 + Ord(ch) - Ord('A') + 10
        else if (ch >= 'a') and (ch <='f') then
            Res:= Res * 16 + Ord(ch)-Ord('a') + 10
        else
          raise Exception.Create('Error');
      end;
      Result := Res;
end;
//以128位例子,256位,512位,768位,1024位的一样
function RSADescryption(InStr,ModStr,KeyStr:String): String;
var
    Str,Temp:String;
    I:Integer;
    RSA:TLBRSA;
begin
   Str:= '';
   for I := 0 to Length(InStr) div 2 - 1 do
   begin
     Temp := Copy(InStr,I * 2 + 1,2);
     Str := Str + Chr(HexToInt(Temp));
   end;
   RSA := TLBRSA.Create(nil);
   RSA.KeySize := aks128;
   RSA.PrivateKey.ModulusAsString := ModStr;
   RSA.PrivateKey.ExponentAsString := KeyStr;
   Result := RSA.DecryptString(Str);
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
   try
     if RSAEncryption(edt1.Text,'51757B748A942803C8D558CFD9C5AD83','591B') = edt2.Text then
        MessageBox(Handle,'注册成功','提示',MB_OK)
     else
        MessageBox(Handle,'注册失败','提示',MB_OK)
   except
        MessageBox(Handle,'注册失败','提示',MB_OK)
   end;
end;

RSA算法的注册机方法如下:

//字符串变换成十六进制
function StrToHex(Instr:String): String;
var
  StrResult,Temp:String;
  i:Integer;
begin
  StrResult := '';
  Temp := '';
  for I := 0 to Length(InStr) - 1 do
    begin
      Temp := Format('%x',[Ord(InStr[I+1])]);
      if Length(Temp) = 1 then
      Temp := '0' + Temp;
      StrResult := StrResult + Temp;
    end;
    Result := StrResult;
end;
//以128位为例子,256 位,512位、768位、1024位的一样
function REAEncryption(InStr,ModStr,KeyStr:String): String;
var
  RSA:TLBRSA;
  TempResult:String;
begin
  TempResult := '';
  RSA := TLBRSA.Create(nil);
  RSA.KeySize := aks128;
  RSA.PrivateKey.ModulusAsString := ModStr;
  RSA.PrivateKey.ExponentAsString := KeyStr;
  Result := RSA.DecryptString(Str);
  RSA.Free;
  Result := StrToHex(TempResult);
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
 edt1.Text := RSAEncryption(edt2.Text,'51757B748A942803C8D558CFD9C5AD83','C1ECF3CB8C36BBFCC3D427BD1EB97A15');
end;

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论