首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

用C#实现pdf文件的完整性验证

现在对文件的完整性验证,防止文件被篡改的技术已经比较成熟,一般使用数字签名,数字水印等,最近我在一个项目中也遇到了防篡改的需求。...该项目要求用户将原始发票用专门的扫描程序扫描成pdf文件,然后将该pdf文件传到服务器上,在上传的同时必须要验证这个pdf是没有被手工修改过的。...我刚一接触到这个需求想到的就是使用数字水印,要不然就直接使用PDF的数字签名功能,不过这些方法都感觉比较比较复杂,一大堆的英文文档也没有心思去研究,于是琢磨了半天,写了一个简化版的数字水印程序,实现了pdf文件完整性验证...验证的基本思路是:             对文件全部内容计算其MD5值,这样无论用户修改了文件的任何一个地方,那么生成的MD5的是完全不一样的,我们可以将这个MD5写到文件的一个隐藏区,一般二进制文件格式都有文件头和文件体部分...这样验证通过以后我们才将该文件流写到服务器硬盘上。

59720

采用一个自创的验证框架实现对数据实体验证

一、创建一个自定义Validator:StringLengthValidator StringLengthValidator数据实体类型的字符串属性进行校验,确保它的长度符合要求(比如小于或者等于数据库中该列的最大长度...this.UpperBound.ToString()); 52: } 53: } 二、为StringLengthValidator创建ValidatorAttribute 自定义的Validator最终通过特性的方式应用到数据实体类型的目标属性上实施验证...16: 当前字符长度:8 17: 验证成功! 18: 验证成功! 19: 验证成功! 20: 验证成功!...作为ValidatorElement的Validator同样通过自定义特性的方式应用到数据实体类型的目标属性上,所以我们也需要StringLengthValidator创建相应的ValidatorElementAttribute..."实现对数据实体验证[编程篇] 采用一个自创的"验证框架"实现对数据实体验证[设计篇] 采用一个自创的"验证框架"实现对数据实体验证[改进篇] 采用一个自创的"验证框架"实现对数据实体验证

78780

采用一个自创的验证框架实现对数据实体验证

Attribute)的方式应用到相应的数据实体类的属性上,ValidatorAttribute是这些特性的基类; ValidationError:在Validator进行数据验证的时候,如果数据实体对象顺利通过验证...Validator通过Validate方法对传入的数据实体进行验证验证失败的错误结果以ValidationError对象的形式返回;通过将相应的Validator应用到数据类型的目标属性上的ValidatorAttribute...在《编程篇》我们可以看到没,我们最终是调用静态外观类Validation的Validate方法对数据实体对象进行验证的。...WCF扩展让验证工作自动执行; 通过Resource的方式定义验证消息模板,可以获得多语言文化的支持 其他 采用一个自创的"验证框架"实现对数据实体验证[编程篇] 采用一个自创的"验证框架"实现对数据实体验证...[设计篇] 采用一个自创的"验证框架"实现对数据实体验证[改进篇] 采用一个自创的"验证框架"实现对数据实体验证[扩展篇]

2.2K90

采用一个自创的验证框架实现对数据实体验证

昨天晚上突发奇想,弄了一个简易版的验证框架,用于进行数据实体验证。...本篇文章分上下两篇,上篇介绍如果来使用这个验证框架,《下篇》介绍背后的设计原理和具体实现。 一、定义最简单的验证规则 我们先看看一个最简单的验证规则如何应用到对应的实体类型上。...六、对多验证规则的支持 实体验证应该是场景驱动的,对于同一中类型的对象,不同的场景决定不同的验证规则。对于“找对象”为例,不同的人具有不同的择偶标准,同一个人在不同的年龄阶段的择偶标准也不可能相同。...采用一个自创的"验证框架"实现对数据实体验证[编程篇] 采用一个自创的"验证框架"实现对数据实体验证[设计篇] 采用一个自创的"验证框架"实现对数据实体验证[改进篇] 采用一个自创的"验证框架..."实现对数据实体验证[扩展篇]

84970

采用一个自创的验证框架实现对数据实体验证

为此,我对这个“验证框架”进行了相应的改进,让CompositeValidator具有了解析“验证表达式”的能力。...3: 验证成功! 4: 验证失败! 5: 通过属性Age表示的年龄要么在18到25周岁之间,要么在40到50周岁之间。 当前年龄为28周岁! 6: 验证成功!...二、在新的CompositeValidator中使用表达式来定义验证规则 如果你采用改进后的验证框架,上面的验证规则可以通过表达式的形式直接写在CompositeValidatorAttribute特性中...我们为它指定一个验证表达式,它自己可以对表达式进行解析,并调用相应的ValidatorElement实施单一验证。最终将这些单一验证结果按照表达式定义的逻辑关系,得到一个最终的结果。..."实现对数据实体验证[编程篇] 采用一个自创的"验证框架"实现对数据实体验证[设计篇] 采用一个自创的"验证框架"实现对数据实体验证[改进篇] 采用一个自创的"验证框架"实现对数据实体验证

922100

MySQL学习之路:数据的完整性-外键约束

数据的完整性 数据完整性是指数据的准确性和逻辑一致性,用来防止数据库中存在不符合语义、无效数据或错误数据等。...MySQL中,数据完整性通常使用约束来实现,本任务主要的约束包括PRIMARY KEY约束、NOT NULL约束、DEFAULT约束、UNIQUE约束、CHECK约束和FOREIGH KEY约束。...) Records: 0 Duplicates: 0 Warnings: 0 CHECK约束 CHECK约束是列输入数据值的验证规则,列中输入数据必须满足CHECK约束的条件,否则无法写入数据库。...MySQL 8.0开始支持CHECK约束。 CONSTRAINT 约束名 CHECK ( 表达式 ) 修改goods表,为商品价格添加CHECK约束,要求价格必须大于0等于。...Query OK, 0 rows affected (0.08 sec) Records: 0 Duplicates: 0 Warnings: 0 外键约束的级联更新和删除 外键约束实现了表间的引用完整性

17220

mysql使用基础 sql语句与数据完整性(二)

: mysql>SET character_set_client=gbk; 显示时乱码: mysql>SET character_set_results=gbk; ②使用insert语句向表中插入记录...Tom的记录: mysql>DELETE FROM user WHERE username='Tom'; 删除表中所有记录(一条一条的删除): mysql>DELETE FROM user; 使用TRUNCATE...删除表中记录(摧毁整张表,然后重建表结构): mysql>TRUNCATE user; 三、数据完整性 数据完整性分为四类:实体完整性(Entity Integrity)、域完整性(Domain Integrity...)、参照完整性(Referential Integrity)、用户自定义完整性(User-definedIntegrity)。...①实体完整性: 规定表中的一行在表中是唯一的实体,一般是通过定义主键的形式来实现的。实体完整性要求每一个表中的主键字段都不能为空或者重复的值。实体完整性指表中行的完整性

1.2K100

MySQL 学习笔记(三):完整性和触发器设计

(一)完整性设计 方法一、在设计表时定义约束 删除数据库school,建立新数据库school1 drop database school; create database school; use...其实这里理论上来说应该是插入失败的,因为 student 有检查约束,但不同于SQL,在MYSQL中,CHECK只是一段可调用但无意义的子句。MySQL会直接忽略。...(二)触发器 MySQL包含对触发器的支持。触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。...创建触发器 在MySQL中,创建触发器语法如下: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH...原因:在mysql的trigger和function中不能出现select * from table形式的查询,因为其会返回一个结果集;而这在mysql的trigger和function中是不可接受的,

1.4K40

MySQL数据库:数据完整性及约束的应用

数据完整性 1.域完整性:---------匹配完整性:非空、缺省 字段/列 2.实体完整性:-------匹配完整性:主键、唯一键 记录/行 3.引用完整性:-------匹配完整性:外键 表与表之间...约束:constraint MySQL中的约束分类 主键:primary key 唯一键:unique 非空:not null 缺省:default 外键:foreign key 主键、唯一键...constraint 约束名 unique(字段名); 删除约束的数据 先删除子表数据,再删除主表数据 级联删除 on delete cascade 级联更新 on update cascade 关掉mysql...外键约束 SET FOREIGN_KEY_CHECKS=0; 打开mysql 外键约束 SELECT @@FOREIGN_KEY_CHECKS; 删除外键 注意:此语句在删除外键后不能关联删除该外键自动产生的约束

1.5K30

你必须了解的反射——反射来实现实体验证

开发工作中,都会需要针对传入的参数进行验证,特别是针对实体进行验证,确保传入的参数格式正确。这里做了一个非常简单的组件进行验证。抛砖引玉,让大家深入思考下反射的应用。...这里使用注解的方式进行优化,只需要在实体定义的时候,定义验证的内容,使用的时候用只需要调用验证的方法就可以了。...} } 字段 说明 description 字段中文名 isEmpty 是否可为空 maxLength 最大长度 minLength 最小长度 regex 正则表达式 验证的时候只需要调用实体就可以进行验证...: /** * 注解验证电泳方法 * * @param bean 验证实体 * @return */ public static...其实,关于实体验证的框架也是有很多成熟的产品(如:http://hibernate.org/validator/),但是大多数都是考虑很广,实现比较复杂点,如果自己只想做一个很轻量级的,完全可以自己来实现

88980

Enterprise Library 4.1学习笔记5----实体验证程序块

实体验证的作用简单来讲,就是从服务端对数据进行验证。...选择实体类所在的DLL(如果实体类没有分层构架,先把项目编译一下,直接选择项目bin目录下的dll) 不过在使用过程中,发现一个bug:如果进行这一步前未编译生成dll,或者进到这一步后,又修改了实体类...,配置工具好象反射时,始终不能刷新出最新的实体类,解决办法:关掉vs,重新打开再选择dll就正常了,不知道这是不是我机器上的个别现象 ?...(d)new-->Rule Set --> new --> Choose Members-->选择要验证的成员 ? (e)添加验证规则 ? (f)设置Person的默认规则 ?...,里面的效果类似于常规的验证控件,不过是要页面提交后,由服务端再返回的,个人觉得这样效率太低,我倾向于先在页面上做客户端验证并给出相关出错提示,然后再到服务端代码里用文中所提的方法来验证,所以这个示例涉及的内容就不准备研究了

65280

你必须了解的反射——反射来实现实体验证

开发工作中,都会需要针对传入的参数进行验证,特别是针对实体进行验证,确保传入的参数格式正确。这里做了一个非常简单的组件进行验证。抛砖引玉,让大家深入思考下反射的应用。...这里使用注解的方式进行优化,只需要在实体定义的时候,定义验证的内容,使用的时候用只需要调用验证的方法就可以了。...title; } } 字段 说明 description 字段中文名 isEmpty 是否可为空 maxLength 最大长度 minLength 最小长度 regex 正则表达式 验证的时候只需要调用实体就可以进行验证...: /** * 注解验证电泳方法 * * @param bean 验证实体 * @return */ public static ValidResultEntity...其实,关于实体验证的框架也是有很多成熟的产品(如:http://hibernate.org/validator/),但是大多数都是考虑很广,实现比较复杂点,如果自己只想做一个很轻量级的,完全可以自己来实现

69570
领券