福昕电子签章验证BUG(Byterange范围)

2023-10-13 04:30

本文主要是介绍福昕电子签章验证BUG(Byterange范围),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

废话不多说,先上效果图同样的文件,请看adobe的验证结果:

有人可能会说,福昕跟adobe验证的机制可能不一样,才导致的福昕通过,adobe验证不通过,下面我就给大家扒一扒里面的猫腻,我竟然发现了福昕的一个bug!!!!!!!

由于我最近在研究无序签章,也就是每个章的保护范围不是全文,于是我为了验证可行性,就去察看了pdf标准,请看下图:

这是pdf1.6标准,规定的关于ByteRange数组四个值的定义,我就为了这个typically搞得我浪费了两天的时间去测试这个东西,标准规定ByteRange数组四个值一般都是整个文档,包括签名的字典对象,但是除了签名值本身。

我天真的以为,我整一个不一般就可以,那么这个数组的四个值我就随便改了改,于是拿去福昕与adobe验证,当我改前两个的时候,福昕跟adobe都给出了一样的答案大概的意思就是我给出的范围是不规范的范围,于是我就开始改后边两个数字(后边两个数字是规定的从签名值以后到文档结尾的范围),当我改最后一个差值的时候,福昕跟adobe给出的答案是一致的,于是我无奈了,只能改第三个值了(这个值是签名完后边的那个字节的绝对坐标),我先是给它加1,附上伪代码(这里面这个step应该是1),于是拿去验证,发现福昕跟adobe给出了相同的答案,如上所示。

但是有意思的事情出现了,当我将step设置成负数的时候 也就是往回倒,开始一个字节一个字节的倒,就出现了文章最开始的那一幕,福昕验证通过了,我以为这样可以(当时非常高兴),于是我将这个值 放大,最后放大到1000,福昕竟然也验证成功了,这与pdf协议规定的范围是相悖的(but exclude the signature contens itself),还好adobe是验证不过的,希望福昕好好改正,ps:QQ372808681 感谢信有木有!!

 

这篇关于福昕电子签章验证BUG(Byterange范围)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/200751

相关文章

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

前端bug调试的方法技巧及常见错误

《前端bug调试的方法技巧及常见错误》:本文主要介绍编程中常见的报错和Bug,以及调试的重要性,调试的基本流程是通过缩小范围来定位问题,并给出了推测法、删除代码法、console调试和debugg... 目录调试基本流程调试方法排查bug的两大技巧如何看控制台报错前端常见错误取值调用报错资源引入错误解析错误

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

Java操作PDF文件实现签订电子合同详细教程

《Java操作PDF文件实现签订电子合同详细教程》:本文主要介绍如何在PDF中加入电子签章与电子签名的过程,包括编写Word文件、生成PDF、为PDF格式做表单、为表单赋值、生成文档以及上传到OB... 目录前言:先看效果:1.编写word文件1.2然后生成PDF格式进行保存1.3我这里是将文件保存到本地后

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

easyui同时验证账户格式和ajax是否存在

accountName: {validator: function (value, param) {if (!/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/i.test(value)) {$.fn.validatebox.defaults.rules.accountName.message = '账户名称不合法(字母开头,允许4-16字节,允许字母数字下划线)';return fal

easyui 验证下拉菜单select

validatebox.js中添加以下方法: selectRequired: {validator: function (value) {if (value == "" || value.indexOf('请选择') >= 0 || value.indexOf('全部') >= 0) {return false;}else {return true;}},message: '该下拉框为必选项'}