如何使用公钥算法作为注册码验证算法进行软件开发的注册认证?

加密算法的作用:选择好的加密算法和软件验证方法,会使软件很难被破解。如果加密算法和验证方法选择不当,更容易破解软件。因此,选择合适的加密算法和验证方法更为重要。
写在前面
常用的算法有哈希算法、对称算法(可分为分组算法和流算法)和非对称算法(公钥算法)。哈希算法是不可逆算法,比如MD5对称算法是一种单密钥算法,可以加密和解密,如DES算法。公钥算法是双密钥算法,而公钥算法和私钥是算法,比如RSA算法。
注册码的比较可以分为明码和非明码。明码比对是指在内存中可以直接看到真假注册码。非明码比较指针的注册码在内存中不可见。
对称算法采用无明码比较的方式,一定程度上增加了破解难度。但是破解者只要分析是哪种算法,然后找到密钥,就可以很容易的写出注册机,所以用对称算法并不是最理想的。RSA采用公钥加密和私钥解密两种密钥,解密难度基于大数分解。而RSA是非对称算法。即使我们自己的软件用的RSA的源代码是一样的,即使密钥未知也很难做出注册机。对RSA算法最有效的攻击是因式分解N,得到解密的密钥。使用RSA算法时,模数的位数要增加,一般建议在1024和2048位以上。软件使用SHA算法验证注册码是否正确,如下所示:
Rsa decrypt(注册码,公钥,模数)=username然后begin MessageBox(Handle,’注册成功’,’ prompt ‘,MB _ OK);End else MessageBox(Handle,’注册失败’,’ prompt ‘,MB _ OK);示例代码如下:
函数HexToInt(hex : string): integer;var I,Res:Integerch:Charbegin RES :=0;对于I :=0到长度(十六进制),请从ch:=十六进制[I 1]开始;如果(ch=0)和(ch=’9 ‘),那么Res :=Res * 16 Ord(ch)-Ord(‘ 0 ‘)else如果(ch=’A ‘)和(ch=’F ‘),那么Res :=Res * 16 Ord(ch)-Ord(‘ A ‘)10 else如果(ch=’a ‘)和(ch=’f ‘),那么Res :=Res * 16 Ord(ch)-Ord(‘ A ‘)10 else抛出异常。创建(‘ Error ‘);结束;结果:=Res结束;//以128位为例,256位,512位,768位,1024位为同一个函数rsadesryption (instr,modstr,keystr 3360 string)3360 string;var Str,Temp:StringI:IntegerRSA:TLBRSAbegin str :=“”;for I :=0 to Length(InStr)p 2-1 do begin Temp :=Copy(InStr,I * 2 1,2);Str :=Str Chr(HexToInt(Temp));结束;RSA :=TLBRSA。创建(无);RSA。KeySize :=aks128RSA。private key . ModulusAsString :=ModStr;RSA。private key . ExponentAsString :=KeyStr;结果:=RSA。DecryptString(Str);结束;程序TForm2。button 1 click(sender : to object);如果RSA encryption (edt1.text,’ 51757 b 748 a 942803 c8 d 58 cf d9 C5 ad 83 ‘,’ 591 b ‘)=ed T2 . text then message box (handle,’注册成功’,’ prompt ‘,MB_OK) else MessageBox(Handle,’注册失败’,’ prompt ‘,MB_OK)除MessageBox(Handle,’注册失败’,’ prompt ‘,MB_OK)结束;结束;RSA算法注册如下:
//字符串变换成十六进制函数StrToHex(指令:字符串):字符串;var StrResult,temp : string : integer begin str result :=” “;temp :=for I :=0 to Length(InStr)-1 do begin Temp :=Format(‘ % x ‘,[Ord(InStr[I 1])]);如果长度(温度)=1,则Temp :=’ 0 ‘ TempStrResult :=StrResult Temp结束;结果:=StrResult结束;//以128位为例子,256 位,512位、768位、1024位的一样函数REAEncryption(InStr,ModStr,KeyStr:String):字符串;var RSA : tlbrsatempresult : string begin temp result :=” “;RSA :=TLBRSA .创建(无);RSA .密钥大小:=aks128RSA .私钥。ModulusAsString :=ModStrRSA .私钥。指数字符串:=密钥字符串;结果:=RSA .DecryptString(Str);RSA .免费;结果:=StrToHex(临时结果);结束;程序t表格2 .按钮2点击(发送者:至对象);开始edt1 .Text :=RSAEncryption(edt2 .正文,’ 51757 b 748 a 942803 c8 d 558 CFD 9 C5 ad 83 ‘,’ C1 ECF 3 CB 8 c 36 bbf cc 3d 427 BD 1 EB 97 a 15 ‘);结束;

其他教程

tcl科技创造精彩(科技创造精彩,畅享智慧生活是TCL的)

2022-8-15 4:02:28

其他教程

你错过的试听课精华:如何赢得数字营销这种科技公司的实习和全职工作?

2022-8-15 4:04:33

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索