首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

30分钟搞定AES系列(上):基础特性

PKCS#5:缺几个字节就填几个字节,每个字节缺的字节数;在AES加密当中严格来说是不能使用PKCS#5的,因为AES的块大小是16bytesPKCS#5只能用于8bytes。...PKCS#7:缺几个字节就填几个字节,每个字节缺的字节数;当长度不对齐时,数据填充到满足分组的长度;当长度刚好对齐时,在原始数据末尾新增一个填充块;OpenSSL在AES加密中默认使用PKCS#7...ISO 10126:最后一个字节是需要填充的字节数(需要填充的字节数包括了最后一字节),其他全部填随机数。...ANSI X9.23:跟ISO 10126很像,只不过ANSI X9.23其他字节填的都是0不是随机数。...设置错误的 aes_obj.iv_value = os.urandom(16) self.assertNotEqual(iv, aes_obj.iv_value)

3.7K3018

ULID 一种比UUID更好的方案,新特性!

规范地编码26个字符串,不是UUID的36个字符 使用Crockford的base32获得更好的效率和可读性(每个字符5) 不区分大小写 没有特殊字符(URL安全) 单调排序顺序(正确检测并处理相同的毫秒...0123456789ABCDEFGHJKMNPQRSTVWXYZ 二进制布局和字节顺序 组件被编码16个八组。每个组件都以最高有效字节在前(网络字节顺序)进行编码。...分布式环境下,替换UUID,全局唯一且毫秒精度有序 比如要按日期对数据库进行分区分表,可以使用ULID中嵌入的时间戳来选择正确的分区分表 如果毫秒精度是可以接受的(毫秒内无序),可以按照ULID排序,不是单独的...时间戳记(48)来自 time.time(),精度毫秒。 随机(80)来自 os.urandom()。...timestamp()方法将为您提供ULID的前48的时间戳快照,randomness()方法将为您提供后80的随机数快照。

2.1K30
您找到你想要的搜索结果了吗?
是的
没有找到

了解一下新工具ULID?

规范地编码26个字符串,不是UUID的36个字符 使用Crockford的base32获得更好的效率和可读性(每个字符5) 不区分大小写 没有特殊字符(URL安全) 单调排序顺序(正确检测并处理相同的毫秒...0123456789ABCDEFGHJKMNPQRSTVWXYZ 二进制布局和字节顺序 组件被编码16个八组。每个组件都以最高有效字节在前(网络字节顺序)进行编码。...分布式环境下,替换UUID,全局唯一且毫秒精度有序 比如要按日期对数据库进行分区分表,可以使用ULID中嵌入的时间戳来选择正确的分区分表 如果毫秒精度是可以接受的(毫秒内无序),可以按照ULID排序,不是单独的...时间戳记(48)来自 time.time(),精度毫秒。 随机(80)来自 os.urandom()。...timestamp()方法将为您提供ULID的前48的时间戳快照,randomness()方法将为您提供后80的随机数快照。

9110

不好意思,UUID 该换了!

规范地编码26个字符串,不是UUID的36个字符 使用Crockford的base32获得更好的效率和可读性(每个字符5) 不区分大小写 没有特殊字符(URL安全) 单调排序顺序(正确检测并处理相同的毫秒...0123456789ABCDEFGHJKMNPQRSTVWXYZ 二进制布局和字节顺序 组件被编码16个八组。每个组件都以最高有效字节在前(网络字节顺序)进行编码。...全局唯一且毫秒精度有序 比如要按日期对数据库进行分区分表,可以使用ULID中嵌入的时间戳来选择正确的分区分表,架构师视频 155G 真全啊 如果毫秒精度是可以接受的(毫秒内无序),可以按照ULID排序,不是单独的...时间戳记(48)来自 time.time(),精度毫秒。 随机(80)来自 os.urandom()。...timestamp()方法将为您提供ULID的前48的时间戳快照,randomness()方法将为您提供后80的随机数快照。

64740

ULID - 一种比UUID更好的方案,新特性!

规范地编码26个字符串,不是UUID的36个字符 使用Crockford的base32获得更好的效率和可读性(每个字符5) 不区分大小写 没有特殊字符(URL安全) 单调排序顺序(正确检测并处理相同的毫秒...0123456789ABCDEFGHJKMNPQRSTVWXYZ 二进制布局和字节顺序 组件被编码16个八组。每个组件都以最高有效字节在前(网络字节顺序)进行编码。...分布式环境下,替换UUID,全局唯一且毫秒精度有序 比如要按日期对数据库进行分区分表,可以使用ULID中嵌入的时间戳来选择正确的分区分表 如果毫秒精度是可以接受的(毫秒内无序),可以按照ULID排序,不是单独的...时间戳记(48)来自 time.time(),精度毫秒。 随机(80)来自 os.urandom()。...timestamp()方法将为您提供ULID的前48的时间戳快照,randomness()方法将为您提供后80的随机数快照。

1.1K10

python3 生成均匀分布随机数_Python 3.9来了!这十个新特性值得关注

我们可以 list 或 dict 直接作为列表和字典的类型注释,不必依赖 typing.List 或者 typing.Dict。因此,代码现在看起来更加简洁,而且更容易理解和解释。  5....它的工作方式是:当参数的 True 时,在调用 shutdown() 函数时取消所有待处理的任务。  7....尽管他们可以使用 os.getrandom()、os.urandom() 或者 secrets.token_bytes() 来生成随机字节,但这些方法无法生成伪随机模式。  ...修复字符串替换函数  在 Python 3.9 版本之前,对于所有非零的 n,"".replace("",s,n) 返回空字符串不是 s。这个错误使用户困惑,并导致应用程序的不一致行为。  ...Python 3.9 修复了该问题,不管 n 是否 0,其结果都与 "".replace("", s) 一致。

94220

消息验证码MAC入门指南

此时如果攻击者CA发送的原始消息和摘要都篡改成新的消息和摘要,那么这个消息对B来说也是完整的,只不过不是A发的。...MAC含有密钥这个种子(只有A和B知道),如果A消息内容和MAC发给B,虽然C是仍然可以修改消息内容和MAC,但是由于C不知道密钥,所以无法生成与篡改后内容匹配的MAC。...B字节长度如果密钥长度比分组长度B大,则先用对应的哈希算法对密钥进行哈希运算,得到L字节长度的哈希,然后对L字节填充0x00直到打到B字节长度图片HMAC运算在选定了HAMC使用的HASH算法时,其实分组长度...key, 中间2)==得到==> 密文块2......密文块n-1 ^ 攻击数据第n个数据块 ==得到==> 中间n,然后 Encrypt(key, 中间n)==得到==> 密文块n(attack_block...)attack_block ^ 原始数据第一个密文块 ==得到==> 中间n+1,然后 Encrypt(key, 中间n+1)==得到==> 密文块n+1......此时,如果我们计算一个,这个刚好是一个

2.2K6324

Python 3.9来了!这十个新特性值得关注

我们可以 list 或 dict 直接作为列表和字典的类型注释,不必依赖 typing.List 或者 typing.Dict。因此,代码现在看起来更加简洁,而且更容易理解和解释。...它的工作方式是:当参数的 True 时,在调用 shutdown() 函数时取消所有待处理的任务。 7....尽管他们可以使用 os.getrandom()、os.urandom() 或者 secrets.token_bytes() 来生成随机字节,但这些方法无法生成伪随机模式。...修复字符串替换函数 在 Python 3.9 版本之前,对于所有非零的 n,"".replace("",s,n) 返回空字符串不是 s。这个错误使用户困惑,并导致应用程序的不一致行为。...Python 3.9 修复了该问题,不管 n 是否 0,其结果都与 "".replace("", s) 一致。

97930

Python中模块

os.urandom(32):随机的32字节,每执行一次变一次 import os import hmac hmac=hmac.new(b’zhao’,os.urandom(32)) hmac.digest...() 字典转换成字符串 json.loads() 字符串转换成字典 pickle模块: pickle.load() 文件中的字节转换成字典 pickle.dump() 字典转换成字节写入到文件中...pickle.dumps() 字典转换成字节 pickle.loads() 字节转换成字典 json和pickle的优缺点: json:               优点:跨语言、体积小...用ret.group取值 ret=re.match('正则表达式','内容') print(ret.group()) 找到符合条件的默认替换所有,设置n次 ret=re.sub(‘正则表达式’,’新...’,’完整字符串’) ret=re.sub(‘正则表达式’,’新’,’完整字符串’,’n’) 找到符合条件的替换,并返回出现了几次 ret=re.subn(‘正则表达式’,’新’,’完整字符串’)

82530

操作运算有什么奇技淫巧?(附源码)

/* 获取第1个字节 */ (x >> 16) & 0x000000ff /* 获取第2个字节 */ (x >> 24) & 0x000000ff /* 获取第3个字节 */ 判断一个数是不是 2 的指数...1001 1000,如果来你想获A的哪一,就把数字B:0000 0000 0000 0000的那一设置1....比如说我想获得A的第三就把B的第三数字设置1,则B0000 0000 0000 0100,设置完之后再把A、B求与, 其结果若为0,说明A的第三0,其结果1,说明A的第三1....从可变位宽扩展的符号 通过3个操作从可变位宽扩展符号 有条件地设置或清除不分支 有条件地否定一个不分支 根据掩码合并两个中的 计数位设置 计数位设置,幼稚的方式 计算由查找表设置 数位集...) 确定单词是否字节 确定一个单词的字节数是否等于n 确定一个单词的字节数是否小于n 确定单词的字节数是否大于n 确定单词是否在m和n之间有一个字节 按词典顺序计算下一排列 更多内容可以查看: http

83541

操作运算有什么奇技淫巧?(附源码)

1001 1001 1001 1000,如果来你想获A的哪一,就把数字B:0000 0000 0000 0000的那一设置1....比如说我想获得A的第三就把B的第三数字设置1,则B0000 0000 0000 0100,设置完之后再把A、B求与, 其结果若为0,说明A的第三0,其结果1,说明A的第三1....从可变位宽扩展的符号 通过3个操作从可变位宽扩展符号 有条件地设置或清除不分支 有条件地否定一个不分支 根据掩码合并两个中的 计数位设置 计数位设置,幼稚的方式 计算由查找表设置 数位集...用减法和加法交换 用XOR交换 用XOR交换单个位 反转序列 反转是显而易见的方式 逐字查找表中的反转 通过3个操作(64乘法和模数除法)反转字节中的 通过4个操作反转字节中的(64乘法...) 确定单词是否字节 确定一个单词的字节数是否等于n 确定一个单词的字节数是否小于n 确定单词的字节数是否大于n 确定单词是否在m和n之间有一个字节 按词典顺序计算下一排列 更多内容可以查看: http

1.2K41

几个被淘汰的Python库,请不要再用!

- True 重要的是要注意 pathlib 只是替代 os.path 不是整个 os 模块, 它还包括 glob 模块的功能,因此如果你习惯于 os.path 与 glob.glob 结合使用,...Secrets 不是 OS 说到 os 模块,你应该停止使用的另一部分是 os.urandom。...以下是你应该考虑切换到数据类的一些原因: 1、它可以是可变的 2、默认提供 repr、eq、init、hash 魔术方法, 3、允许指定默认, 4、支持继承。...Proper Logging 不是 print 这不是标准库的最新添加,但值得使用 - 你应该使用正确的日志记录不是打印语句, 如果你在本地调试问题,则可以使用 print,但对于任何无需用户干预即可运行的生产就绪程序...所以,一旦你切换到 Python 3.11,你应该养成使用 import tomllib 不是 import tomli 的习惯。少了一种需要担心的依赖!

17410

记64地址截断引发的挂死问题

当然这些都不是本文的重点,本文仅介绍遇到的这个典型的问题。 问题描述 由于项目本身涉及的系统比较复杂,因此简单分享一下定位过程,下一节通过简洁的示例程序来说明。...main函数通过调用testFun,地址返回给p,并打印p的地址。 编译运行: $ gcc -o main main.c test.c $ ....8字节 testFun内部申请到的内存地址是占用8字节 main函数中的p的地址4字节 返回被截断了 也就是和我们预期的结果完全不一样。...正因如此,就有了第二个警告,提示从整型转换成指针。 到此其实也就真相大白了。既然testFun的返回被编译器默认为int,返回一个8字节的指针类型,返回却是int,自然就会被截断了。...,64程序会挂死 32和64程序用户空间地址范围分别是多少 如何在调试中设置程序源码路径 程序完整编译经历那几个阶段

84220

Python3.9的7个特性

4.4 ulp 假设我们没有64计算机。相反,我们只有3数字。用这三个数字我们可以表示像3.14这样的数字,但不能表示3.141。...对于3.14,我们可以表示的最接近的较大数字是3.15,这两个数字相差1 ULP**(最后一的单位)**,即0.1。返回与这个示例相当,但与您的计算机的实际精度相同。 ?...__import__() 引发 ImportError __import__()现在引发ImportError不是ValueError,这更有意义。...Python已经可以通过3个不同的函数生成随机字节 os.getrandom() os.urandom() secrets.token_bytes() 但它们不能产生伪随机模式。...这个random.random.randbytes函数可以以受控的方式生成随机字节,并且可以通过设置种子复制结果。不过,它只能在安全性不重要的情况下使用。

94530

java虚拟机栈-由StackOverFlowError引起的思考

假设项目中开启1024个线程,那么使用默认栈大小的情况下,虚拟机栈将会占用1G的内存,如果栈大小调整256K,虚拟机只花费256M内存用于1024个栈的分配。...最后,我们也可以在HotSpot源码中找到关于栈大小的设置。以64Linux操作系统例,默认栈大小1M,编译线程的栈大小4M,如代码清单所示: ?...虚拟机栈的最小在虚拟机启动时解析完全局参数之后调用os::init_2方法设置。虚拟机栈的最小受当前系统是32还是64的影响,也受系统页大小影响。...在64Linxu操作系统下,HotSopt所允许设置的栈的最小228K[6],如代码清单: ?...字节码指令前面的编号我们暂时理解行号。在本例中,行号0到7的字节码指令完成的工作是变量a自增后的赋值给result变量。

1.2K20

结构体对齐+联合体+

按照结构体的对齐规则,可知结构体的第一个成员是从偏移量0的地址处开始存储,因为c1的类型char所以只占一个字节结构体的第二个成员是要对齐到对齐数的整数倍处,我们的先求出对齐数,按照结构体对齐的第二条规定...此时结构体的偏移量9,结构体的总大小最大对齐数的整数倍,所以还得浪费三个字节空间才达到要求。所以struct s1的大小12。...(struct S2)); return 0; } 结果 默认的对齐数最好设置2的n次方,便于机器的读写。...1个字节,我们假设它是从字节右端开始存储,当10放到内存时只能存放3个比特,我们10的低位三个比特存储起来,第一个字节只剩5个比特,存储b时又要花费4个比特,当存储c时,空间已经不够了,就会又开辟一个字节的空间用来存储...这是不考虑字节剩余空间利用的情况,如果考虑利用第一个和第二个字节的剩余比特是可以存储d的。具体的存储取决于编译器,C语言没有明确规定。

17220
领券