把自定义字符串写入设备作为软件加密狗功能示例代码

1. 修改写入字符串权限密码 [设备出厂默认为空]

Json::Value json_param;

json_param["cmd"] = "modify_write_pwd";

json_param["old_pwd"] = (char*)(LPCTSTR)m_strOld_Write_Pwd;

json_param["new_pwd"] = (char*)(LPCTSTR)m_strNew_Write_Pwd;

int ret = agi_ub_action_param("", AGI_UB_JSON_ACTION_VALUE_FLASH_DATA, json_param.toFastString_().c_str(), nullptr, 0);

if (ret != ERR_NO)
{
    std::string s_err = "";
    if (ret == -41) s_err = "[老密码错误!]";
    else if (ret == -42) s_err = "[读取FLASH信息失败]";
    else s_err = "[其它错误!]";

    CString s;
    s.Format("更新写入密码失败:%d %s", ret, s_err.c_str());
    MessageBox(s, "警告", MB_OK | MB_ICONWARNING);
}
else
{
    MessageBox("修改写入密码成功 !!!\r\n\r\n 请牢记密码,忘记密码只能联系商务复位设备!!!", "警告", MB_OK | MB_ICONWARNING);
}

2. 修改读取字符串权限密码 [设备出厂默认为空]

Json::Value json_param;

json_param["cmd"] = "modify_read_pwd";

json_param["old_pwd"] = (char*)(LPCTSTR)m_strOld_Read_Pwd;

json_param["new_pwd"] = (char*)(LPCTSTR)m_strNew_Read_Pwd;

int ret = agi_ub_action_param("", AGI_UB_JSON_ACTION_VALUE_FLASH_DATA, json_param.toFastString_().c_str(), nullptr, 0);

if (ret != ERR_NO)
{
    std::string s_err = "";
    if (ret == -41) s_err = "[老密码错误!]";
    else if(ret == -42) s_err = "[读取FLASH信息失败]";
    else s_err = "[其它错误!]";

    CString s;
    s.Format("更新读取密码失败:%d %s", ret, s_err.c_str());
    MessageBox(s, "警告", MB_OK | MB_ICONWARNING);
}
else
{
    MessageBox("修改读取密码成功 !!!\r\n\r\n 请牢记密码,忘记密码只能联系商务复位设备!!!", "警告", MB_OK | MB_ICONWARNING);
}

3. 写入标记字符串 [最多64字节]

Json::Value json_param;

json_param["cmd"] = "write_data";

json_param["write_pwd"] = (char*)(LPCTSTR)m_strWrite_Pwd;

//用在软件加密功能时可以用   设备guid + 私钥 + 软件型号 后进行MD5,读取后进行校验是否为本软件的设备

json_param["data"] = (char*)(LPCTSTR)m_strWrite_Data;

int ret = agi_ub_action_param("", AGI_UB_JSON_ACTION_VALUE_FLASH_DATA, json_param.toFastString_().c_str(), nullptr, 0);

if (ret != ERR_NO)
{
    std::string s_err = "";
    if (ret == -41) s_err = "[密码错误!]";
    else if (ret == -42) s_err = "[读取FLASH信息失败]";
    else s_err = "[其它错误!]";

    CString s;
    s.Format("写入数据失败:%d %s", ret, s_err.c_str());
    MessageBox(s, "警告", MB_OK | MB_ICONWARNING);
}
else
{
    MessageBox("写入数据完成 !!!", "警告", MB_OK | MB_ICONWARNING);
}

4. 读取标记字符串

Json::Value json_param;

json_param["cmd"] = "read_data";

json_param["read_pwd"] = (char*)(LPCTSTR)m_strRead_Pwd;

char out_json[4096] = { 0 };

int ret = agi_ub_action_param("", AGI_UB_JSON_ACTION_VALUE_FLASH_DATA, json_param.toFastString_().c_str(), out_json, 4096);

if (ret != ERR_NO)
{
    std::string s_err = "";
    if (ret == -41) s_err = "[密码错误!]";
    else if (ret == -42) s_err = "[读取FLASH信息失败]";
    else s_err = "[其它错误!]";

    CString s;
    s.Format("读取数据失败:%d %s", ret, s_err.c_str());
    MessageBox(s, "警告", MB_OK | MB_ICONWARNING);
}
else
{
    Json::Value json_out_data;
    Json::Reader r;
    r.parse(out_json, out_json + strlen(out_json), json_out_data);

    m_strRead_Data = json_out_data["data"].asString().c_str();
}