Python爬虫算法篇(一)

点击上方 [蓝字] 关注我们

1.四种类型算法

  • 摘要算法

  • 对称加密算法

  • 非对称加密算法

    SM国密算法

本篇主要是对摘要算法的讲解。

2.摘要算法

消息摘要算法/签名算法包含:`MD5、SHA、HMAC`

2.1 MD5

全称` MD5` 消息摘要算法,又称哈希算法、散列算法,由美国密码学家`罗纳德·李维斯特`设计,于 1992 年作为 RFC 1321 被公布,用以取代 MD4 算法。

之所以叫摘要算法,它的算法就是提取明文重要的特征。

摘要算法是单向加密的,也就是说明文通过摘要算法加密之后,是不能解密的。

摘要算法的第二个特点密文是固定长度的,它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用`16进制`的字符串表示)。

2.2 SHA

全称安全哈希算法,由美国国家安全局`(NSA)`所设计,主要适用于数字签名标准里面定义的数字签名算法。

`SHA` 通常指 `SHA` 家族的五个算法,分别是:` SHA-1`、`SHA-224`、`SHA-256`、`SHA-384`、`SHA-512`。

`SHA` 是比 `MD5` 更安全一点的摘要算法,`MD5` 的密文是 32 位,而 `SHA-1` 是 40 位,版本越强,密文越长,代价是速度越慢。

`sha`系列特征

` `sha1`: 23c02b203bd2e2ca19da911f1d270a06d86719fb(40位) `````sha224`: 1ffeffcbe2707dc5d1c10df619203c1a3b620c70394b3c4c106d92e6(56位) `````sha256`: c3a845a318cd654749ea4db6f4d5f9cb5c6e5b0cade46d9dc04af46d32049c7c(64位) `````sha512`: af47f324b77a4885748bfc3f0d9b5a846c0153c589852bb3f185ab6e7a600547b818ab994776e8d24584457f9aac84246b0de971584cebbdd96aa1aee6630f9f(128位) `

2.3 HMAC

全称散列消息认证码、密钥相关的哈希运算消息认证码,于 1996 年提出,1997 年作为 RFC 2104 被公布。

`HMAC` 加密算法是一种安全的基于加密 `Hash` 函数和共享密钥的消息认证协议,它要求通信双方共享密钥 key、约定算法、对报文进行 `Hash` 运算,形成固定长度的认证码。通信双方通过认证码的校验来确定报文的合法性。

3.摘要算法使用

JS实现 算法 的类库有很多,比较常用是`crypto-js`,安装 `npm install crypto-js` 。

Python实现 算法 的类库也有很多,比较常用是`hashlib`,安装 `npm install hashlib` 。

3.1 MD5

JavaScript 实现

var CryptoJS = require('crypto-js')``   ``function md5_encrypt(text) {`    `return CryptoJS.MD5(text).toString()``}``   ``console.log("md5_encrypt:" + md5_encrypt('1'),"("+md5_encrypt("1").length + "位)");``   ``// 执行结果``// md5_encrypt:c4ca4238a0b923820dcc509a6f75849b (32位)

Python 实现

# -*- coding: utf-8 -*-``import hashlib``   ``   ``def md5_encrypt(text):`    `md5_hash = hashlib.md5(text.encode()).hexdigest()`    `return md5_hash``   ``   ``print("md5_encrypt:" + md5_encrypt("1"), "(" + str(len(md5_encrypt("1"))) + "位)")``   ``# 执行结果``# md5_encrypt:c4ca4238a0b923820dcc509a6f75849b (32位)

3.1 SHA

JavaScript 实现

var CryptoJS = require('crypto-js')``   ``function sha1_encrypt(text) {`    `return CryptoJS.SHA1(text).toString();``}``   ``   ``function sha224_encrypt(text) {`    `return CryptoJS.SHA224(text).toString();``}``   ``   ``function sha256_encrypt(text) {`    `return CryptoJS.SHA256(text).toString();``}``   ``   ``function sha384_encrypt(text) {`    `return CryptoJS.SHA384(text).toString();``}``   ``   ``function sha512_encrypt(text) {`    `return CryptoJS.SHA512(text).toString();``}``   ``console.log("sha1_encrypt:" + sha1_encrypt('1'), "(" + sha1_encrypt("1").length + "位)");``console.log("sha224_encrypt:" + sha224_encrypt('1'), "(" + sha224_encrypt("1").length + "位)");``console.log("sha256_encrypt:" + sha256_encrypt('1'), "(" + sha256_encrypt("1").length + "位)");``console.log("sha384_encrypt:" + sha384_encrypt('1'), "(" + sha384_encrypt("1").length + "位)");``console.log("sha512_encrypt:" + sha512_encrypt('1'), "(" + sha512_encrypt("1").length + "位)");``   ``// 执行结果``// sha1_encrypt:356a192b7913b04c54574d18c28d46e6395428ab (40位)``// sha224_encrypt:e25388fde8290dc286a6164fa2d97e551b53498dcbf7bc378eb1f178 (56位)``// sha256_encrypt:6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b (64位)``// sha384_encrypt:47f05d367b0c32e438fb63e6cf4a5f35c2aa2f90dc7543f8a41a0f95ce8a40a313ab5cf36134a2068c4c969cb50db776 (96位)``// sha512_encrypt:4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a (128位)

Python 实现

import hashlib``   ``   ``def sha1_encrypt(text):`    `return hashlib.sha1(text.encode()).hexdigest()``   ``   ``def sha224_encrypt(text):`    `return hashlib.sha224(text.encode()).hexdigest()``   ``   ``def sha256_encrypt(text):`    `return hashlib.sha256(text.encode()).hexdigest()``   ``   ``def sha384_encrypt(text):`    `return hashlib.sha384(text.encode()).hexdigest()``   ``   ``def sha512_encrypt(text):`    `return hashlib.sha512(text.encode()).hexdigest()``   ``   ``print("sha1_encrypt:" + sha1_encrypt("1"), "(" + str(len(sha1_encrypt("1"))) + "位)")``print("sha224_encrypt:" + sha224_encrypt("1"), "(" + str(len(sha224_encrypt("1"))) + "位)")``print("sha256_encrypt:" + sha256_encrypt("1"), "(" + str(len(sha256_encrypt("1"))) + "位)")``print("sha384_encrypt:" + sha384_encrypt("1"), "(" + str(len(sha384_encrypt("1"))) + "位)")``print("sha512_encrypt:" + sha512_encrypt("1"), "(" + str(len(sha512_encrypt("1"))) + "位)")``   ``# 执行结果``# sha1_encrypt:356a192b7913b04c54574d18c28d46e6395428ab (40位)``# sha224_encrypt:e25388fde8290dc286a6164fa2d97e551b53498dcbf7bc378eb1f178 (56位)``# sha256_encrypt:6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b (64位)``# sha384_encrypt:47f05d367b0c32e438fb63e6cf4a5f35c2aa2f90dc7543f8a41a0f95ce8a40a313ab5cf36134a2068c4c969cb50db776 (96位)``# sha512_encrypt:4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a (128位)

3.1 HMAC

JavaScript 实现

// 引用 crypto-js 加密模块``var CryptoJS = require('crypto-js')``   ``function hmac_md5_encrypt(key, text) {`    `return CryptoJS.HmacMD5(text, key).toString();``}``   ``function hmac_sha1_encrypt(key, text) {`    `return CryptoJS.HmacSHA1(text, key).toString();``}``   ``function hmac_sha256_encrypt(key, text) {`    `return CryptoJS.HmacSHA256(text, key).toString();``}``   ``var key = "123456" //密钥``console.log("hmac_md5_encrypt:" + hmac_md5_encrypt(key, "1"), "(" + hmac_md5_encrypt(key, "1").length + "位)")``console.log("hmac_sha1_encrypt:" + hmac_sha1_encrypt(key, "1"), "(" + hmac_sha1_encrypt(key, "1").length + "位)")``console.log("hmac_sha256_encrypt:" + hmac_sha256_encrypt(key, "1"), "(" + hmac_sha256_encrypt(key, "1").length + "位)")``   ``// 执行结果``// hmac_md5_encrypt:182a482404f2b14cac558800aad7e5d0 (32位)``// hmac_sha1_encrypt:14fa5fd73b2c622235e8e720838c3e6a84564830 (40位)``// hmac_sha256_encrypt:570fcdc8e6e9200863a4608d20c676c5b20e4f219c036713f007fb2fbef3b078 (64位)

Python 实现

import hmac``   ``   ``def hmac_md5_encrypt(key, text):`    `md5 = hmac.new(key.encode(), text.encode(), digestmod='MD5')`    `return md5.hexdigest()``   ``   ``def hmac_sha1_encrypt(key, text):`    `sha1 = hmac.new(key.encode(), digestmod='sha1')`    `sha1.update(text.encode('utf8'))`    `return sha1.hexdigest()``   ``   ``def hmac_sha256_encrypt(key, text):`    `sha1 = hmac.new(key.encode(), digestmod='sha256')`    `sha1.update(text.encode('utf8'))`    `return sha1.hexdigest()``   ``   ``key = "123456"  # 密钥``print("md5_encrypt:" + hmac_md5_encrypt(key, "1"), "(" + str(len(hmac_md5_encrypt(key, "1"))) + "位)")``print("hmac_sha1_encrypt:" + hmac_sha1_encrypt(key, "1"), "(" + str(len(hmac_sha1_encrypt(key, "1"))) + "位)")``print("hmac_sha256_encrypt:" + hmac_sha256_encrypt(key, "1"), "(" + str(len(hmac_sha256_encrypt(key, "1"))) + "位)")``   ``# 执行结果``# md5_encrypt:182a482404f2b14cac558800aad7e5d0 (32位)``# hmac_sha1_encrypt:14fa5fd73b2c622235e8e720838c3e6a84564830 (40位)``# hmac_sha256_encrypt:570fcdc8e6e9200863a4608d20c676c5b20e4f219c036713f007fb2fbef3b078 (64位)

点个【在看】,你最好看

点击下方安全链接前往获取

CSDN大礼包:《Python入门&进阶学习资源包》免费分享

👉Python实战案例👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

图片

图片

👉Python书籍和视频合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

图片

👉Python副业创收路线👈

图片

这些资料都是非常不错的,朋友们如果有需要《Python学习路线&学习资料》,点击下方安全链接前往获取

CSDN大礼包:《Python入门&进阶学习资源包》免费分享

本文转自网络,如有侵权,请联系删除。

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值