小弟初学,现有个问题想请教各位大大: 
如何根据给定的一个不定长度的字符串,得出对应的注册码? 
注册码最好是类似于XXXXX-XXXXX-XXXXX-XXXXX(字母和数字的组合)这种的。 
重点是要可以通过注册码反推出原本给定的字符串。 我大概有个思路,就是不知道是否可以实现呢? 1.程序通过硬件信息(CPU ID或硬盘ID)得出机器码; 
2.客户将机器码发送给作者; 
3.作者将机器码经RSA加密后得出加密的字符串; 
4.作者将加密的字符串变换为类似于"XXXXX-XXXXX-XXXXX-XXXXX"等形式的注册码; 
5.作者将注册码发送给客户; 
6.客户输入注册码; 
7.程序将注册码变换为加密的字符串; 
8.程序将加密的字符串经RSA解密后得出机器码; 
9.程序检验机器码是否与本机硬件相符后判定是否注册成功。     以上是我一个大致的思路。现在的问题是,如果按照这个思路走,其它的步骤都没有问题,关键在于第4和第7步。也就是不知道在第4步时如何将加密后的字符串变成类似于"XXXXX-XXXXX-XXXXX-XXXXX"等形式的注册码,而在第7步时又该如何通过这个注册码反推出加密后的字符串呢?如果这条路走不通,又该如何实现这种功能呢?小弟愚笨,公平请大家帮帮忙,不吝赐教,谢谢。 

解决方案 »

  1.   

    个人感觉,不一定非要用对称加密算法。
    我是在您的第四步采用了非对称加密。
    在第7步时将注册码按照事先设计好的加密算法再进行一次加密,如果注册码正确,那么程序自己根据机器码计算的和按照注册码计算的应该一致。第8步是程序自己获得机器码自己计算并比较。当然你可以设计各种加密解密思路。
    "XXXXX-XXXXX-XXXXX-XXXXX"形式的注册码你可以认为五个一组共四组的字符,我通过散列生成过。这方面的资料去看雪论坛看看,那里的很多。我只是初步用了一下,没有深入。共同学习下。
      

  2.   

    还有:我软件现在加密和你的思路一样。但是就是第4步用了非对称加密。最后你可以从非对称加密的字符串里提取特定的20个字符,进行存储,在软件的注册里用同样的算法。再进行比较。最后存为App.config文件里。
      

  3.   

    RSA加密貌似速度慢,解密估计也差不多。如果不需要解密的话可以用其他的不可逆算法。如MD5
      

  4.   


    这个方法是可行的。
    我的建议是不要做第4步和第7步,直接把加密后的字符串发给用户作为注册码。PilotEdit就是这样实现的。
    你可以参考PilotEdit. http://topic.csdn.net/u/20090723/07/33b39399-81ad-4fb1-a4a2-78509d2161a3.html
      

  5.   

    第4步和第7步显得有点多余了,
    注册码用户可以复制下来,然后发给作者,然后作者会把相应的授权码发给用户,用户输入授权码(同样的也是复制过来的,并且把授权码存入config里)
    每次进入系统以后判断是否和加密后的授权码相同,如相同都可以用,反之则不能用。