有什么事
创建我自己的小型Internet项目以保护文档免受伪造的想法是由缺陷检查员论坛上的讨论引起的,该讨论会专门伪造了他们发布的质量控制结论。
在项目实施过程中,我意识到我想到了电子数字签名的概念,也就是自行车,虽然我没有发明,但是关于我的道路的故事却很有启发性。
防止假货的任务的相关性
事实上,在本世纪无纸化信息而不是单一的基本建设(无论是天然气管道还是购物中心)中,无需准备一套完整的竣工文件即可完成这些工作,包括无损检测(视觉,射线照相,超声)结论。

该结论是以某种形式起草的文件,其中包含例如焊缝的适用性或不适用性的结论。 非破坏性测试服务要花钱,而且通常相当可观。 不道德的客户/中介机构可能会雇用经过认可的实验室,从中获得一些意见,然后停止或暂停工作。
探伤仪操作员或实验室负责人可能会感到惊讶的是,当他们得知即使终止工作后,仍会代表他们发布结论,并在其上盖上伪造的印章和伪造的签名。 实验室的声誉受到损害,实际上是在违反法律。 只是在许多情况下,没人会知道。
作为讨论的一部分-如何保护文档,表达了将QR码放在文档上的想法,其中将记录有关控制对象是否适用的结论编号,日期和结论。 这种方法为什么好-扫描,复印文档时,QR码仍可清晰区分。
但是,诈骗者也将能够简单地生成带有必要内容的QR码。
一个想法的诞生
然后我想到一个主意-为什么不使用可靠的算法对此类QR码的内容进行加密。 如果是这样,则需要提出一种在扫描时(例如通过智能手机的摄像头)对其进行解密的方法。 这里的想法诞生于在Web服务方面进行解密,该服务将存储用于解密的密钥。
我上一次在2000年用记事本建立网站时,对现代网站建设技术不太熟悉,因此我选择了Wix,以为在服务的帮助下,我将获得一幅美丽的图画,并且使用数据库的可能性很小,并使用Wix代码对它进行编码我需要什么
我必须马上说我做起来没有太大困难,并且在几个晚上,作为一个业余爱好者,我能够从或多或少的现成模块中组装所需的解决方案。
加密方式
我在Github上使用Java Script实现了完成的AES 128位加密
算法 ,并将其放在网站的后端部分。
这也许是工作中最容易的部分。 加密本身的工作方式对我来说并不完全不有趣。 我担心这个计划的宏伟。
最主要的是不要忘记将编码的文本转换为字节,并且加密结果为十六进制。
// Convert text to bytes var textBytes = aesjs.utils.utf8.toBytes(text); // The counter is optional, and if omitted will begin at 1 var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5)); var encryptedBytes = aesCtr.encrypt(textBytes); // To print or store the binary data, you may convert it to hex var encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes);
QR码生成
我使用了现成的
API 。
要工作,只需创建一个html1对象-显示任意html代码并调用API函数
let val = “ " $w("#html1").src = "https://api.qrserver.com/v1/create-qr-code/?size=100x100&data=" + val.toString(); $w("#html1").show();
与用户合作
Wix支持基本的用户注册和配置文件编辑功能。 该工具有些漏洞,但可以使用。
我只需要添加一个字段来描述注册用户代表的组织的名称,但是该字段是只读的,当服务管理员收到确认注册用户确实代表指定组织的信息时,它将由服务管理员填写。
还必须加强与付费/免费使用功能(每月最多可免费保护20个文档)和服务付费期限相关的最简单逻辑。
工作原理
唯一的专用加密密钥绑定到用户的帐户。
登录的用户填写有关结论的信息(数字,日期,结果)的表单:

然后,该算法返回一个包含TEXT密文并充当公用密钥USER_ID的URL,如下例所示:
https:// * * /checkqr?user=3b01b0aa-68a0-4521-ab12-f17b86d3eabc&v=1.0&text=8a026594c26be959f4280e28fe8402c1acef233e369a31613d654d3b0a5bbaca206f3058d27d2fde66b65cb64a5a6caecb69b07ad39c0015e923dad89eb723
该URL变成了QR码,用户已经通过将其复制到剪贴板上而将其放在文档上(您可以将其包含在源文件中,也可以将其作为不干胶标签粘贴在完成的打印文档上)。

此处重要的是-信息不会进入站点数据库,而是仅以此链接和包含此链接的QR码的形式保留。 因此,在服务器上没有存储关于受保护文档的内容的信息。
解析链接时由站点检查代码
为了在网站识别出链接时进行解析,我使用了有关Wix代码的帮助
www.wix.com/code/reference/wix-http-functions.html如果在解密过程中出了点问题,可能是对原始QR码做了一些更改
“文档代码被解密,但有错误。 可能是假的。 请与准备该文档的组织联系以进行澄清。”
如果解密成功完成,则发出解密的文本,其中包含实验室的名称,文件编号,签发日期和结果,并要求用户将解密结果与他在真实文件中看到的进行比较。
结论
从这个想法的诞生开始,我就开始使用一些预制的砖块进行工作了。
我邀请您就我提出的想法进行讨论,以尝试测试/破解我的服务。
有待完成的工作
在habr上写出执行结果- 了解一次链接检查后如何重置查询
- 要弄清楚如何缩小密文,因为对长URL进行编码时,QR码的大小太大
- 添加将代码复制到剪贴板或通过单击按钮通过电子邮件发送的功能(直到我弄清楚如何在javascript中完成代码)
- 改进移动版本的工作
对可能的批评的初步回应:
实验室在其网站上保存结论注册不是更容易,并且类似的QR标签会导致该注册管理机构甚至显示报告的副本吗?
可以做到,但是需要大量的人工工作或引入您自己的IT解决方案(例如由我开发的解决方案),但显然比使用现成的解决方案要花费更多。
不可能完全公开获取这样的注册信息,因为该信息不是公开的,而是只能由承包商,客户和Rostekhnadzor来考虑。