数据校验

SQL SERVER数据页checksum校验算法

雨燕双飞 提交于 2019-11-26 04:11:47
在SQL SERVER2005以上版本中,数据页默认开启checksum,标识为m_flagBits & 0x200 == True,其值m_tornBits位于页头0x3C,4字节。 其算法概述如下: 读8KB 进BUF 将BUF头部 CHECKSUM的4字节值清0 uint32 checksum = 0 //初始checksum for i in range(0,15): //每扇区的初始checksum overall = 0; for ii in range(0,127): //对当前扇区的每个4字节做累加异或 overall = overall ^ BUF[i][ii]; //对每扇区的checksum进行移位,方法为向左移位15-i位, //左边移出的15-i位补到最低位。 checksum = checksum ^ rol(overall, 15- i); return checksum; //Gets checksum c源码如下: //***CODE***// #include <stdio.h> #include <stdlib.h> #define seed 15 //Initial seed(for first sector) #define CHAR_BIT 8 //***PROTOTYPES***// unsigned int page_checksum

认证-权限-频率组件

[亡魂溺海] 提交于 2019-11-26 01:41:09
认证 源码分析 """ # 还是一如既往的dispatch作为入口函数. 1)APIView的dispath(self, request, *args, **kwargs) 2)dispath方法内 self.initial(request, *args, **kwargs) 进入三大认证 # 认证组件:校验用户 - 游客、合法用户、非法用户 # 游客:代表校验通过,直接进入下一步校验(权限校验) # 合法用户:代表校验通过,将用户存储在request.user中,再进入下一步校验(权限校验) # 非法用户:代表校验失败,抛出异常,返回403权限异常结果 self.perform_authentication(request) # 权限组件:校验用户权限 - 必须登录、所有用户、登录读写游客只读、自定义用户角色 # 认证通过:可以进入下一步校验(频率认证) # 认证失败:抛出异常,返回403权限异常结果 self.check_permissions(request) # 频率组件:限制视图接口被访问的频率次数 - 限制的条件(IP、id、唯一键)、频率周期时间(s、m、h)、频率的次数(3/s) # 没有达到限次:正常访问接口 # 达到限次:限制时间内不能访问,限制时间达到后,可以重新访问 self.check_throttles(request) 3) 认证组件

序列化类

时光怂恿深爱的人放手 提交于 2019-11-26 01:04:24
Serializer 序列化准备: 模型层:models.py class User(models.Model): SEX_CHOICES = [ [0, '男'], [1, '女'], ] name = models.CharField(max_length=64) pwd = models.CharField(max_length=32) phone = models.CharField(max_length=11, null=True, default=None) sex = models.IntegerField(choices=SEX_CHOICES, default=0) icon = models.ImageField(upload_to='icon', default='icon/default.jpg') class Meta: db_table = 'user' verbose_name = '用户' verbose_name_plural = verbose_name def __str__(self): return '%s' % self.name 后台管理层:admin.py from django.contrib import admin from . import models admin.site.register(models.User) 配置层

借鉴微信小程序表单校验wxValidate的源码里边的正则

感情迁移 提交于 2019-11-25 21:26:59
微信小程序表单校验wxValidate的源码,里边的正则表达式用起来不错 /** * 表单验证 * * @param {Object} rules 验证字段的规则 * @param {Object} messages 验证字段的提示信息 * */ class WxValidate { constructor(rules = {}, messages = {}) { Object.assign(this, { rules, messages, }) this.__init() } /** * __init */ __init() { this.__initMethods() this.__initDefaults() this.__initData() } /** * 初始化数据 */ __initData() { this.form = {} this.errorList = [] } /** * 初始化默认提示信息 */ __initDefaults() { this.defaults = { messages: { required: '这是必填字段。', email: '请输入有效的电子邮件地址。', tel: '请输入11位的手机号码。', url: '请输入有效的网址。', date: '请输入有效的日期。', dateISO: '请输入有效的日期(ISO),例如

MD5中Java和Js配套实现

对着背影说爱祢 提交于 2019-11-25 20:10:28
MD5为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。 1.MD5算法具有以下特点: 1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。 2、容易计算:从原数据计算出MD5值很容易。 3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。 4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。 5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。 根据以上的特定我们能总结出几个根据以上特点衍生出来可以供我们使用的特性: 1.方便存储:MD5加密出来都是32位的字符串,能够给定固定大小的空间存储,传输,验证 2.文件加密:MD5运用在文件加密上很有优势,应为只需要32为字符串就能对一个巨大的文件进行验证完整性 3.不 可 逆:MD5加密出来只会截取末尾32位,具有良好的安全性,如果是对于参数加密很难伪造MD5 4.加密损耗低:MD5加密对于性能的消耗微乎其微(我获得的结果是:0.001毫秒) 2.实际上需要如何应用呢