- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在开发 C++ Qt 应用程序。为了在应用程序或其连接的设备出现故障时帮助用户,程序导出所有内部设置并将它们存储在一个普通文件(目前为 csv)中。然后将此文件发送到公司(例如通过邮件)。
为避免对导出的设置进行不经意的操作(例如,导出后由用户手动操作),我需要某种机制来检测这一点。
方法应该尽可能简单,因为这不是一个非常关键的信息,但仍然有效。
我能想到的就是散列或加密,但我很确定已经有一个简单而优雅的解决方案可用于此。
最佳答案
您可以使用多种摘要或加密签名方案中的一种。由于这必须脱机工作,因此您的可执行文件必须包含一个 secret - 无论是用于公钥加密的公钥,还是其他方式,但您永远无法以这种方式保护自己免受坚定的攻击者的侵害。一个没有逆向工程就无法绕过的简单方案就足够了;如果有人可以进行逆向工程,那么您就完蛋了。
一个最简单的方案是对文件的内容进行哈希处理,并附加(或预先设置)一个私有(private) secret ,并将哈希附加到文件的末尾。在接收端,您跳过散列、添加 secret 、重新散列和比较。
如果检查工具需要独立且简单易用,有两种选择:
将 Qt 构建为静态链接,并静态链接到 C++ 运行时。然后使用该 Qt 版本构建该工具:它将非常小,不到 1MB,并且没有依赖项。
将验证器作为单个 html 文件提供,并让它使用 JavaScript File API .用户在他们的 Web 浏览器中打开 html 文件,将文件拖放到拖放区域,并获得即时响应。如今,它可以在任何常见的浏览器上运行,即 Edge、Chrome、Safari、Firefox、Konqueror ......
在 Qt 中执行此操作的一种简单方法是将内容附加到内容的 SHA-256 的十六进制表示中,并附加一个 secret :
static const kHexSealSize = 2+64; // hex SHA-256
static QByteArray kSecret { "Things taste bad without salt." };
QByteArray sealHash(const QByteArray & data, int size = -1) {
if (size < 0) size = data.size();
QCryptographicHash hash(QCryptographicHash::Sha256);
hash.addData(data.constData(), size);
hash.addData(kSecret);
auto seal = QByteArray("\r\n") + hash.result().toHex();
Q_ASSERT(hex.size() == kHexSealSize);
return seal;
}
QByteArray seal(const QByteArray & data) {
return data + sealHash(data);
}
/// Returns whether a seal is valid
bool checkSeal(const QByteArray & data) {
if (data.size() < kHexSealSize) return false;
auto hexSrc = data.right(kHexSealSize);
auto hexCmp = sealHash(data, data.size() - kHexSealSize);
return hexSrc == hexCmp;
}
关于c++ - 避免/检测对导出文件的操纵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36986790/
我是puppeteer的新手(通常对javascript不太了解),并且正在尝试编写一些基本功能来: 从XPath获取所有链接 循环浏览并单击那些链接 屏幕截图并保存页面的HTML 返回屏幕快照,然后
您好,我正在尝试创建一个我想通过网络发送到服务器的数据包,我几乎已经对数据包进行了排序,但是它缺少一个长度标识符,我需要在我的方法结束时计算它并添加放入数据包。 数据包结构是这样的 前导值标识符 (U
我正在尝试更改按钮的样式(实际上只是一个 div)。我可以在 CSS 中使用 .classname:active 来实现,但是按钮只会在被点击时改变样式;单击释放后,它不会保持样式更改。所以,我决定使
我有一个下拉导航栏(fiddle here 和下面的代码片段)。单击 SubItem 时,JS 函数会进行 Ajax 调用(未显示)。我想要实现的是在单击 SubItem 时隐藏 SubItems 列
给定一组平面图(Autocad、svg 或任何需要的格式...),我想以编程方式生成从 A 点到 B 点的方向。基本上我想说:“我如何获得从101房间到143房间?” (或三倍奖励积分,从 101 房
我在 Win32 下的 MS dev studio 中将一些代码从 C 转换为 C++。在旧代码中,我使用 QueryPerformanceCounter() 进行了一些高速计时,并对获得的 __in
我正在寻找一种方法来从 QTableWidget 单元格中挤出所有可能的空间。我粘贴了一些代码来演示我在下面尝试过的事情,并且我上传了在 OSX 10.8.5、Qt 4.8.4、PySide 1.2.
对于 PhoneGap 移动应用程序,我有以下场景: 应用程序打开并显示index.html 用户登录并被重定向到 home.html 然后用户可以转到 news.html 我想以一种方式处理 hom
可能是一个简单的问题: 尝试使用plotly生成散点图并自定义图例。 这是我的数据: require(plotly) set.seed(1) my.df % add_annotations(text=
在 Instagram/Facebook 上的帖子下方,您会看到类似“第 1 个人、第 2 个人和其他 10 个人喜欢此帖子”的文字。我想知道如何使用 Django 来实现网站的相同效果?通常,我会使
我必须使用 Form.Action 重定向到将从我的页面获取值的脚本。值得注意的是,这个脚本是外部的。 我的问题是,我还想要被点击并连接了 Action 的按钮,以便首先在后面的代码中完成一些功能。
我有一个问题。 我可以在 Express 中操纵路线吗?当我发出 get 或 post 申请地址时,我可以将 2 条路线传递到同一个 get 或 post 申请吗?像这样的东西。 module.exp
如果我在不同的 Canvas 上绘制我的图像,我可以使用 js 库应用一些效果,如淡入淡出、移动和其他效果吗?如果可能的话,在速度和性能方面可能会很有趣,而不是操纵“原始”?非常感谢 最佳答案 if
我希望你能帮助我。如何转换这个扁平的 JavaScript 数组,来自: [ {"state":"First State","district":"First District","local_
我有一个 React JSX 元素,我想遍历它的子元素,对其中的每个字符串元素执行替换(或任何其他操作),然后返回新的、修改后的 JSX 元素。例如: var element = Text { var
我正在制作一个 Java 网络项目,我想在其中使用一些 javascript 操作一些前端 SVG 元素。 我正在绘制一个相当简单的车库图,其中有一个来自 JSP 页面的棚屋元素。 我想要一个 jav
我读过许多帖子,其中人们询问有关对 XML 元素强制执行某些属性顺序的问题,一般的回答是这不合法/必需/不允许/相关/其他。 我不是在寻找任何说我不应该关心属性顺序的回复,所以如果这是你的观点,请不要
大家好,我的问题是,如何将两个 C 风格的字符串 append 到一个字符串中? 我对 C++ 的处理方式 (std::string) 很感兴趣,我从未接触过 C 风格的字符串,需要为我当前的开发项目
我选择了 HTML 页面上的所有节点,如下所示: var all = $('*'); 然后我遍历每个节点,检查每个节点是否有关联的文本值: var newDom = all.map((i, node)
示例取自 Mozilla's help page re = /(\w+)\s(\w+)/; str = "John Smith"; newstr = str.replace(re, "$
我是一名优秀的程序员,十分优秀!