医院做网站的好处wordpress中文标题转换拼音插件

当前位置: 首页 > news >正文

医院做网站的好处,wordpress中文标题转换拼音插件,网站建设前端和后端的区别,怎样开通app软件文章目录 一、概述1.1 哈希算法1.2 常见算法分类1.2.1 SHA算法1.2.2 MD4算法1.2.3 MD5算法 1.3 Hash算法的特性1.4 Hash算法的应用场景1.4.1 数据校验1.4.2 安全加密1.4.3 数字签名 二、Hash算法使用2.1 使用hash函数直接获取hash值2.2 使用hashlib库进行hash计算2.2.1 基本使用… 文章目录 一、概述1.1 哈希算法1.2 常见算法分类1.2.1 SHA算法1.2.2 MD4算法1.2.3 MD5算法 1.3 Hash算法的特性1.4 Hash算法的应用场景1.4.1 数据校验1.4.2 安全加密1.4.3 数字签名 二、Hash算法使用2.1 使用hash函数直接获取hash值2.2 使用hashlib库进行hash计算2.2.1 基本使用2.2.2 算法的选择2.2.2.1 使用构造器2.2.2.2 使用new()方法 2.2.3 使用algorithms_guaranteed查看所有平台都支持的哈希算法名称2.2.4 使用algorithms_available查看当前解释器支持的哈希算法名称2.2.5 使用digest()返回哈希值2.2.6 使用hexdigest()返回十六进制哈希值2.2.7 使用update()函数添加数据2.2.8 hash类型的其他方法 一、概述 1.1 哈希算法 Hash一般翻译做散列、杂凑或音译为哈希是把任意长度的输入又叫做预映射pre-image通过散列算法变换成固定长度的输出该输出就是散列值。这种转换是一种压缩映射也就是散列值的空间通常远小于输入的空间不同的输入可能会散列成相同的输出所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数也叫做摘要算法。 1.2 常见算法分类 1.2.1 SHA算法 安全散列算法英语Secure Hash Algorithm缩写为SHA是一个密码散列函数家族是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的长度固定的字符串又称消息摘要的算法。且若输入的消息不同它们对应到不同字符串的机率很高。 如SHA-1、SHA-2包括SHA-224、SHA-256、SHA-384和SHA-512四种。 1.2.2 MD4算法 MD4(RFC 1320)是 MIT 的Ronald L. Rivest在 1990 年设计的MD 是 Message Digest消息摘要 的缩写。它适用在32位字长的处理器上用高速软件实现——它是基于 32位操作数的位操作来实现的。 1.2.3 MD5算法 MD5(RFC 1321)是 Rivest 于1991年对MD4的改进版本。它对输入仍以512位分组其输出是4个32位字的级联与 MD4 相同。MD5比MD4来得复杂并且速度较之要慢一点但更安全在抗分析和抗差分方面表现更好。 1.3 Hash算法的特性 一个优秀的Hash算法具有如下特点 正向快速给定明文和 hash 算法在有限时间和有限资源内能计算出 hash 值。逆向困难给定若干 hash值在有限时间内很难基本不可能逆推出明文。输入敏感原始输入信息修改一点信息产生的 hash 值看起来应该都有很大不同。冲突避免很难找到两段内容不同的明文使得它们的 hash值一致发生冲突。对于任意两个不同的数据块其hash值相同的可能性极小对于一个给定的数据块找到和它hash值相同的数据块极为困难。 1.4 Hash算法的应用场景 1.4.1 数据校验 通过将需要传输的数据进行hash校验然后在传输之后本地再次对数据进行hash校验将两次数据对比即可快速的确认数据是否一致以及数据是否被篡改。
1.4.2 安全加密 通过hash算法可以将明文的密码加密成固定长度的密码串大大加强了密码的安全防护很难暴力破解。 1.4.3 数字签名 Hash算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢所以在数字签名协议中单向散列函数扮演了一个重要的角色。对Hash值又称数字摘要进行数字签名在统计上可以认为与对文件本身进行数字签名是等效的。 二、Hash算法使用 2.1 使用hash函数直接获取hash值 python内置的hash()函数可以快速的获取到hash不过存在不同进程或者编译过程会有差异的问题此方法适用于同一次运行时获取制定数据所需要的内容但不适用于快程序或者跨进程的对比。 测试代码如下 rawdata 我只是一个测试数据 rawdata1 我只是一个测试数据 print(Hash-rawdata : ,hex(hash(rawdata))) print(Hash-rawdata : ,hex(hash(rawdata))) print(Hash-rawdata : ,hex(hash(rawdata))) print(Hash-rawdata1 : ,hex(hash(rawdata1))) print(Hash-rawdata1 : ,hex(hash(rawdata1))) print(Hash-rawdata1 : ,hex(hash(rawdata1)))多次运行结果如下

第一次运行

thon\debugpy\adapter/../..\debugpy\launcher 53510 – D:\Zero.App\PyQt.Demo\zero.hash\hsah.py Hash-rawdata : 0x2dbaf7fe96a1d731 Hash-rawdata : 0x2dbaf7fe96a1d731 Hash-rawdata : 0x2dbaf7fe96a1d731 Hash-rawdata1 : -0x4a06373e0e525a49 Hash-rawdata1 : -0x4a06373e0e525a49 Hash-rawdata1 : -0x4a06373e0e525a49

第二次 运行

(venv) PS D:\Zero.App\PyQt.Demo d:; cd d:\Zero.App\PyQt.Demo; d:\Zero.App\PyQt.Demo\venv\Scripts\python.exe c:\Users\LJM.vscode\extensions\ms-python.python-2023.16.0\pythonFiles\lib\python\debugpy\adapter/../..\debugpy\launcher 53519 – D:\Zero.App\PyQt.Demo\zero.hash\hsah.py Hash-rawdata : -0x62b9a6623c3140b Hash-rawdata : -0x62b9a6623c3140b Hash-rawdata : -0x62b9a6623c3140b Hash-rawdata1 : 0x7c7ad2277463d6c3 Hash-rawdata1 : 0x7c7ad2277463d6c3 Hash-rawdata1 : 0x7c7ad2277463d6c3如上根据多次运行获取到的hash值对比特性汇总如下 不一样的数据那怕只是差了一个空格肉眼不好观测但是hash值上有非常大的区别同样的数据在同一个进程中多次获取hash值结果是一样的同样的数据在不同进程中获取到的值是不一样的。 2.2 使用hashlib库进行hash计算 使用hashlib库可以有效的避免直接使用hash()函数存在不同进程计算值差异的问题。 2.2.1 基本使用 rawdata 我只是一个测试数据hash hashlib.md5(rawdata.encode()) # 注意传入的数据需要是二进制bytes类型数据。 print(Hashlib使用hashlib.md5(rawdata) :) print(type : , type(hash)) # 数据类型 print(digest : , hash.digest()) # 返回数据值 print(hexdigest: , hash.hexdigest()) # 返回十六进制的摘要哈希值结果 Hashlib使用hashlib.md5(rawdata) : type : class _hashlib.HASH # 类型返回的是一个Hash类型 digest : b\x93laB*\x97\x84\x11\x94\xf9\x98\xcaY\xcb\xc6 hexdigest: 936c61423c2a97841194f998ca59cbc6 # 十六机制的值2.2.2 算法的选择 2.2.2.1 使用构造器 常用的算法如下可以使用构造器直接使用。 elif sys.version_info (3, 8):def new(name: str, data: ReadableBuffer b) - _Hash: …def md5(string: ReadableBuffer b) - _Hash: …def sha1(string: ReadableBuffer b) - _Hash: …def sha224(string: ReadableBuffer b) - _Hash: …def sha256(string: ReadableBuffer b) - _Hash: …def sha384(string: ReadableBuffer b) - _Hash: …def sha512(string: ReadableBuffer b) - _Hash: …2.2.2.2 使用new()方法 可以使用new()方法使用调用未创建构造器的算法。 print(使用new方法调用算法 :) h hashlib.new(sha512_256) h.update(btest) print(hexdigest : , h.hexdigest()) 结果如下 使用new方法调用算法 : hexdigest : 3d37fe58435e0d87323dee4a2c1b339ef954de63716ee79f5747f94d974f913f2.2.3 使用algorithms_guaranteed查看所有平台都支持的哈希算法名称 返回一个集合其中包含此模块在所有平台上都保证支持的哈希算法的名称。 print(打印所有平台都支持的算法名称) print(hashlib.algorithms_guaranteed)打印所有平台都支持的算法名称 {sha384, sha3_384, md5, sha224, blake2s, sha3_224, shake_256, shake_128, blake2b, sha3_512, sha1, sha3_256, sha256, sha512}算法选用时建议使用通用性较强的算法当然可以根据自己实际需求选择加密能力更强的。 2.2.4 使用algorithms_available查看当前解释器支持的哈希算法名称 返回一个集合其中包含在所运行的 Python 解释器上可用的哈希算法的名称。 print(打印所运行的python解释器支持算法名称) print(hashlib.algorithms_available)打印所运行的python解释器支持算法名称 {sha512_224, whirlpool, sha256, shake_128, ripemd160, blake2s, sha3_224, sha3_384, mdc2, sha384, md4, sha224, md5, sha1, sm3, sha512, sha3_256, sha3_512, blake2b, md5-sha1, shake_256, sha512_256}2.2.5 使用digest()返回哈希值 返回当前已传给 update() 方法的数据摘要。 这是一个大小为 digest_size 的字节串对象字节串中可包含 0 至 255 的完整取值范围。 2.2.6 使用hexdigest()返回十六进制哈希值 类似于 digest() 但摘要会以两倍长度字符串对象的形式返回其中仅包含十六进制数码。 这可以被用于在电子邮件或其他非二进制环境中安全地交换数据值。 2.2.7 使用update()函数添加数据 用 bytes-like object 来更新哈希对象。 重复调用相当于单次调用并传入所有参数的拼接结果: m.update(a); m.update(b) 等价于 m.update(ab)。 print(使用update更新数据) hash hashlib.sha256() hash.update(bhello) print(hash.hexdigest()) hash.update(bword) print(hash.hexdigest())结果如下 使用update更新数据 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 0b322d15ea034793a8646baa1744ffacbdf7f959b66c68970f032c4ac8b9c8cb2.2.8 hash类型的其他方法 hash.block_size以字节表示的结果哈希对象的大小。hash.block_size以字节表示的哈希算法的内部块大小。hash.name此哈希对象的规范名称总是为小写形式并且总是可以作为 new() 的形参用来创建另一个此类型的哈希对象。hash.copy()返回哈希对象的副本“克隆”。 这可被用来高效地计算共享相同初始子串的数据的摘要。