ET199加密方案——用户注册机制

来源:互联网 发布:ios看图软件 编辑:程序博客网 时间:2024/06/05 05:06

加密一词来源已久,自从人们希望对自己私人的信息得到保护开始,就有了加密这个概念。软件行业的加密是软件厂商为了保护软件开发的利益而采取的一种软件保护方式,加密的好坏直接影响到软件的销售。当前软件加密的方法多种多样,基本上来说可以分为不依赖硬件的加密方案和依赖特定硬件的的加密方案。就不依赖特定硬件的软加密来说,很多的共享软件都是采用序列号加密或者是许可证加密等等,而这种加密方式的用户名和序列号都是在您的计算机上完成的,这样就会给破解者可趁之机,给软件的合法使用造成巨大的隐患,本方案可有效的避免这种漏洞。

方案原理说明:

本方案示例,注册程序通过E199加密锁中的公钥对输入的用户名进行RSA私钥加密运算(1024位),产生注册码。主程序通过锁中的私钥对注册码解密,以此来验证用户注册的合法性,如果用户合法将启用高级功能。开发商可以根据这一方案实现软件使用版本的发布。

方案示例:

本说明文档中仅列举核心代码或函数,详细的代码设计,请参看方案源代码。所有操作均在插有ET199加密锁的状态下完成,并且加密锁属性都是出厂默认设置。

一、 运行注册机程序GenRegCode.exe

4

输入用户名“zhangsan”,单击“算码”,将在“注册码”中显示出计算之后的注册码。复制注册码,当然如果记忆力足够好的话,也可以记下然后在主程序中手动敲入。

//公钥加密

int CGenRegCodeDlg::RSAEncode(BYTE* pbuf, int len)

{

    DWORD          dwRet;

    int            leng;

ET_CONTEXT     etc;

BYTE           tmpbuf[1+128];

// =================

//打开加密锁

    if(OpenDog(&etc) != ET_S_SUCCESS)  return -1;

//校验PIN

if(ETVerifyPin(&etc, ET_DEFAULT_USER_PIN, ET_USER_PIN_LEN, ET_USER_PIN) != ET_S_SUCCESS)  return -2;

memset(tmpbuf, 0, sizeof(tmpbuf));

tmpbuf[0] = Func_RsaEnc;

memcpy(tmpbuf+1, pbuf, len);

leng  = sizeof(tmpbuf);

    dwRet = ExecuteDog(&etc, "1000", tmpbuf, sizeof(tmpbuf), tmpbuf, &leng);

//关闭加密锁

ETClose(&etc);

if(dwRet == 0 && tmpbuf[0] == 0)

{

   //返回数据

       memcpy(pbuf, tmpbuf+1, leng);

   //

   return 0;

}

else

{

   return  -3;

}

}

二、 运行RegisterDemo.exe

5

可以看到“本软件尚未注册”,目前程序还是试用版本,只具备“基本功能”,“高级功能”不可用。单击“软件注册”,弹出“软件注册”,输入正确用户名和注册码

6

验证成功会提示“下次启动程序时验证注册是否合法”,如果下次启动后,“高级功能”可用,那么说明注册用户是合法的。

//私钥解密

BOOL CRegisterDemoDlg::RSADecode(BYTE* pbuf, int len)

{

DWORD          dwRet;

    int            leng;

ET_CONTEXT     etc;

BYTE           tmpbuf[1+128];

// =================

//打开加密锁

    if(OpenDog(&etc) != ET_S_SUCCESS)  return FALSE;

//校验PIN

if(ETVerifyPin(&etc, ET_DEFAULT_USER_PIN, ET_USER_PIN_LEN, ET_USER_PIN) != ET_S_SUCCESS)  return FALSE;

memset(tmpbuf, 0, sizeof(tmpbuf));

tmpbuf[0] = Func_RsaDec; 

memcpy(tmpbuf+1, pbuf, len);

leng  = sizeof(tmpbuf);

    dwRet = ExecuteDog(&etc, "1000", tmpbuf, sizeof(tmpbuf), tmpbuf, &leng);

//关闭加密锁

ETClose(&etc);

if(dwRet == 0 && tmpbuf[0] == 0)

{

   //返回数据

       memcpy(pbuf, tmpbuf+1, 128);

   return TRUE;

}

else

{

   return  FALSE;

}

}

方案特点:

ET199加密锁具备硬件计算RSA算法的功能,并且ET199加密锁中密钥文件是安全不会被窃取的,这保证了加密锁中密钥的安全,利用这个功能将产生与验证注册码(加密与解密)的过程移植到锁内完成,那么破解者没有办法得到密钥,也就没有办法模仿这个计算过程,保证了用户注册的合法性。