赞
踩
摘要算法又称哈希/散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。算法不可逆。
散列/哈希算法有:
- SHA1 SHA224 SHA256 SHA384 SHA512 MD5
- HmacSHA1 HmacSHA224 HmacSHA256 HmacSHA384 HmacSHA512 HmacMD5 PBKDF2
SHA(Secure Hash Algorithm)是由美国专门制定密码算法的标准机构—— 美国国家标准技术研究院(NIST)制定的。
SHA系列算法的摘要长度分别为:SHA为20字节(160位,通常用一个40位的16进制字符串表示)、SHA256为32字节(256位)、 SHA384为48字节(384位)、SHA512为64字节(512位),由于它产生的数据摘要的长度更长,因此更难以发生碰撞,因此也更为安全,它是未来数据摘要算法的发展方向。由于SHA系列算法的数据摘要长度较长,因此其运算速度与MD5相比,也相对较慢。
SHA1的应用较为广泛,主要应用于CA和数字证书中,另外在互联网中流行的BT软件中,也是使用SHA1来进行文件校验的。
示例:
- <?php
- echo sha1('123456'); //7c4a8d09ca3762af61e59520943dc26494f8941b
- CryptoJS.SHA1('123456').toString();
- //"7c4a8d09ca3762af61e59520943dc26494f8941b"
-
- CryptoJS.SHA256('123456').toString();
- //"8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92"
- import hashlib
-
- # sha224, sha256, sha384, sha512同理
- sha1 = hashlib.sha1()
- sha1.update('123456'.encode('utf-8'))
- print(sha1.hexdigest())
-
- # 7c4a8d09ca3762af61e59520943dc26494f8941b
也就是说JavaScript的CryptoJS.SHA256()函数,在 Python 中对应的版本是hashlib.sha256(),详情可以看下下面的两个示例代码
js_Sha256_demo.js
- var appKey = "qew121fdf";
- var qa_secretKey = "6123wkwqjkewjkbej";
-
- var secretKey = qa_secretKey;
-
- var timestamp = "" + Math.round(new Date().getTime());
-
- console.log("timestamp=" + timestamp)
-
- var signStr = "appKey=" + appKey + "&appSecret=" + secretKey + "&expireTime=" + timestamp
-
- var sign = "" + CryptoJS.SHA256(signStr)
-
- console.info("signStr = " + signStr)
-
- //写到 postman 的环境变量中
- pm.environment.set("ak", appKey);
- pm.environment.set("et", timestamp);
- pm.environment.set("sign", sign);
python_sha256_demo.py
- import time
- import hashlib
- from logzero import logger
-
- # 获取 token
- appKey = "qew121fdf"
- qa_secretKey = "6123wkwqjkewjkbej"
-
- secretKey = qa_secretKey
- timestamp = str(int(time.time() * 1000))
-
- signStr = "appKey=" + appKey + "&appSecret=" + secretKey + "&expireTime=" + timestamp
- # sha224, sha256, sha384, sha512同理
- sha1 = hashlib.sha256()
- sha1.update(signStr.encode('utf-8'))
-
- self.ak = appKey
- self.et = timestamp
- self.sign = sha1.hexdigest()
- logger.info("ak: {}, et: {}, sign: {}".format(self.ak, self.et, self.sign))
GitHub - brix/crypto-js: JavaScript library of crypto standards.
CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法。目前已支持的算法包括:
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。
1、在线加密解密
在线加密解密
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。