算法密钥如何使用注册码软件(算法密钥明码注册码是一种)「算法注册机怎么用」

加密算法作用:选择好的加密算法和软件校验方式,会使破解软件变得很困难
如果加密算法和校验方式选择不当,则软件破解较为容易
因此选择适当的加密算法和校验方式更为重要
写在前面的话常用的算法有Hash算法、对称算法(可分为分组算法和流算法)、非对称算法(公开密钥算法)
Hash算法是一种不可逆的算法,如MD5等;对称算法是一种单密钥算法,可以加密和解密,如DES算法等;公开发密钥算法是一种双密钥算法,公钥算法、私钥是算法,如RSA算法
注册码比较分为明码和非明码比较,明码比较是指真、假注册码都可以直接在内存中看到
非明码比较指针注册码在内存中不可见
对称算法应用非明码比较的方式,在一定程度上增加了破解难度,但只要破解者分析出是哪种算法,然后找到密钥,就可以轻易地写出注册机,所以使用对称算法还不是最理想的
RSA采用了两个密钥,公钥加密和私钥解密,它的解密难度是基于大数分解
并且RSA是一种非对称算法,即使有和自己软件使用的RSA的源码相同,在密钥未知的情况下同样很难做出注册机
对RSA算法最有效的攻击就是对N进行因式分解,从而得到密钥进行解密,在使用RSA算法的时候要提高模数的位数,一般建议在1024、2048位以上
软件里使用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;
算法密钥如何使用注册码软件(算法密钥明码注册码是一种)
(图片来源网络,侵删)

联系我们

在线咨询:点击这里给我发消息