点击上方 [蓝字] 关注我们
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入门&进阶学习资源包》免费分享
本文转自网络,如有侵权,请联系删除。