(5)可变、不可变和hash函数】的更多相关文章

一.可变和不可变数据类型 在python中,我们对数据类型除了分为数字类型.字符串类型.列表类型.元组类型.字典类型和集合类型外, 还有另外一种分类方式,我们给数据类型分为可变数据类型和不可变数据类型. 可变数据类型:列表.字典. 不可变数据类型:数字.字符串.元组. 二.hash 什么是hash呢? Hash一般译为“散列”,也音译为“哈希”,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,输出的就是散列值. 这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输…
函数参数传递本质上和变量整体复制一样,只是两个变量分别为形参a和实参b.那么,a=b后,a变了,b值是否跟着变呢?这取决于对象内容可变不可变 首先解释一下,什么是python对象的内容可变不可变? python的变量是无类型的,如n=1   #变量n无类型(n相当于指针),其指向int数据类型的值,这个值是int类型. 所以,python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的对象. 举个列子, 不可变如,a=5后,a=10,这…
可变数据类型:列表.字典 不可变数据类型:整型.浮点型.字符串.元组 为什么可变数据类型不能作为python函数的参数?请看以下例子: def foo(a=[]): a.append(1) return a print(foo()) print(foo()) print(foo()) 结果: [1] [1, 1] [1, 1, 1] 我们继续打印下每次函数的返回值的内存地址: print(id(foo())) print(id(foo())) print(id(foo())) 结果: 14034…
补充:(可用操作技巧) >>> x=900 >>> y=900 >>> x==y True >>> type(x) is type(y) True >>> x is y False >>> id(x) 3107344641872 >>> id(y) 3107344907216 #is 左边的是否是右边的,is比较的是id 而‘==’比较的是值 ===================…
hash函数: 一般翻译为“散列”或“哈希”,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值唯一来唯一的确定输入值(这也是应用hash函数时需要注意避免的).简单来说,就是将任意长度的消息压缩到某一固定长度的消息摘要的函数. 1.特征:被hash的值不变,对应hash的值一定是不变的.(hash的值的计算过程是依据这个值的一些特征计算的,这就要求ha…
第二十个知识点:Merkle-Damgaard hash函数如何构造 这里讲的是MD变换,MD变换的全称为Merkle-Damgaard变换.我们平时接触的hash函数都是先构造出一个防碰撞的压缩函数.然后先证明这个小的,固定长度的压缩函数是安全的,然后再用它构造一个任意长度的哈希算法.虽然存在很多其它的构造方法,MD是迄今为止最常用的(至少是被用到最多的),例如MD5,SHA1,SHA2.因此是时候来了解一下它了. 安全的哈希函数? 一般来说,一个安全的哈希函数\(h\)应该是: 抗原象攻击(…
可变/不可变类型 可变类型 ID不变的情况下,值改变,则称之为可变类型,如列表,字典 不可变类型 值改变,ID改变,则称之为不可变类型,如 整数 字符串,元组 整数类型 int 正整数 用途就是记录年龄,电话号码,等内容 定义: age = 19. # int() 类型转换 int() 只能是纯数字的字符,还有浮点型 float 浮点数 用途就是用来记录工资,身高,体重,带有小数为的数据 定义:pice = 3.2 # float() 类型的转换 float() 包含小数的字符串,或是正整数型…
不时会爆出网站的服务器和数据库被盗取,考虑到这点,就要确保用户一些敏感数据(例如密码)的安全性.今天,我们要学的是 hash 背后的基础知识,以及如何用它来保护你的 web 应用的密码. 申明 密码学是非常复杂的一门学科,我不是这方面的专家,在很多大学和安全机构,在这个领域都有长期的研究. 本文我试图使事情简单化,呈现给大家的是一个 web 应用中安全存储密码的合理方法. “Hashing” 做的是什么? Hashing 将一段数据(无论长还是短)转成相对较短的一段数据,例如一个字符串或者一个整…
自从c++11起,bitset用于unordered container,将会提供默认的hash函数. 在gcc中,相关代码如下: // DR 1182. /// std::hash specialization for bitset. template<size_t _Nb> struct hash<_GLIBCXX_STD_D::bitset<_Nb>> : public std::unary_function<_GLIBCXX_STD_D::bitset&l…
本文部分内容摘自网络,参考资料链接会在文后给出,在此感谢原作者的分享. 计算理论中,没有Hash函数的说法,只有单向函数的说法.所谓的单向函数,是一个复杂的定义,大家可以去看计算理论或者密码学方面的数据.用“人类”的语言描述,单向函数就是:如果某个函数在给定输入的时候,很容易计算出其结果来:而当给定结果的时候,很难计算出输入来,这就是单向函数.各种加密函数都可以被认为是单向函数的逼近.Hash函数(或者称为散列函数)也可以看成是单向函数的一个逼近.即它接近于满足单向函数的定义. Hash函数还有…