福昕电子签章验证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

相关文章

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: '该下拉框为必选项'}

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹

Spring Boot集成PDFBox实现电子签章

概述 随着无纸化办公的普及,电子文档的使用越来越广泛。电子签章作为一种有效的身份验证方式,在很多场景下替代了传统的纸质文件签名。Apache PDFBox 是一个开源的Java库,可以用来渲染、生成、填写PDF文档等操作。本文将介绍如何使用Spring Boot框架结合PDFBox来实现电子签章功能。 准备工作 环境搭建:确保你的开发环境中安装了JDK 8或更高版本,并且配置好了Maven或

【电子通识】半导体工艺——保护晶圆表面的氧化工艺

在文章【电子通识】半导体工艺——晶圆制造中我们讲到晶圆的一些基础术语和晶圆制造主要步骤:制造锭(Ingot)、锭切割(Wafer Slicing)、晶圆表面抛光(Lapping&Polishing)。         那么其实当晶圆暴露在大气中或化学物质中的氧气时就会形成氧化膜。这与铁(Fe)暴露在大气时会氧化生锈是一样的道理。 氧化膜的作用         在半导体晶圆

React 笔记 父子组件传值 | 父组件调用子组件数据 | defaultProps | propsType合法性验证

1.通过props实现父组件像子组件传值 、方法、甚至整个父组件 传递整个父组件则   [变量名]={this} import Header from "./Header"render(){return(<Header msg={"我是props传递的数据"}/>)} import React,{Component} from "react";class Header extends

Java验证辛钦大数定理

本实验通过程序模拟采集大量的样本数据来验证辛钦大数定理。   实验环境: 本实验采用Java语言编程,开发环境为Eclipse,图像生成使用JFreeChart类。   一,验证辛钦大数定理 由辛钦大数定理描述为: 辛钦大数定理(弱大数定理)  设随机变量序列 X1, X2, … 相互独立,服从同一分布,具有数学期望E(Xi) = μ, i = 1, 2, …, 则对于任意正数ε ,