常用的登录加密算法

您所在的位置:网站首页 md5加密绕过 常用的登录加密算法

常用的登录加密算法

2023-05-29 21:09| 来源: 网络整理| 查看: 265

scrypt(常用登陆)

https://pypi.org/project/scrypt/

参数有三:盐值:a secret message,加密的密码 ‘password’,maxtime解密或机密最大时间maxtime=0.1, 时间非常短会报错。如0.05

如果密码不正确,scrypt将抛出异常

import os import scrypt def hash_password(password, maxtime=0.5, datalength=64): return scrypt.encrypt(os.urandom(datalength), password, maxtime=maxtime) def verify_password(hashed_password, guessed_password, maxtime=0.5): try: scrypt.decrypt(hashed_password, guessed_password, maxtime) return True except scrypt.error: return False

详情

具体查看

官网详情

加密bcrypt(常用登陆)

https://pypi.org/project/bcrypt/3.1.0/

pip install bcrypt

Bcrypt是单向Hash加密算法,类似Pbkdf2算法 不可反向破解生成明文(解释看https://www.jianshu.com/p/2b131bfc2f10)

bcrypt加密的使用场景是这样的:

1、服务端记录了密码原文, 客户端接收用户输入的密码, 然后用这个密码通过盐去加密生成一个字符串, 发给服务端.

hash = bcrypt.hashpw(password, bcrypt.gensalt())

2、服务端接收这个字符串,输入的明文密码与密文密码进行加密, 判断两次密文是否相等, 如果相等,就是说密码是正确的

hash1 = bcrypt.hashpw(password, hash)

示例

from bcrypt import hashpw, gensalt #通过盐去加密,gensalt(12)为随机生成的盐 hash = hashpw("123456".encode('utf8'), gensalt(12)) hash1 = hashpw('123456'.encode('utf8'), hash) if hash == hash1: print('密码正确')passlib(常用登陆)

https://pythonhosted.org/passlib/

pip install passlib

from passlib.hash import pbkdf2_sha256 hash = pbkdf2_sha256.encrypt("123456", rounds=200000, salt_size=16) 函数有三个参数 第一个 需要散列的字符串 第二个是密码迭代次数 第三个是salt的大小 print(hash) $pbkdf2-sha256$200000$yzlnrJVSqjUGQOi9d44xxg$dwTCx.DpGUmlkR2OMzuQ7xPPCQ7sFY2p5b0wX4keuBo

核对时很简单,passlib有个函数用于验证是否正确

from passlib.hash import pbkdf2_sha256 hash1 = pbkdf2_sha256.verify("123456", hash) print(hash1) True

以下转http://www.51testing.com/html/38/488838-3716630.html 背景: 项目是跟银行对接,接收与发送数据需要sha1withRSA加密,然后其他测试人员需要导入数据到银行的系统,但是呢? 目前已有写好的java代码,可是我对java不熟悉,所以用python来写,目的是做成一个web页面供其他人使用,上传csv格式的文件即可达到目的。

from M2Crypto import RSA, BIO, EVP import os def sign_sha1(data): # 下面的这三行 我也不是很懂 待研究 m = EVP.MessageDigest("sha1") # 先计算散列值 m.update(data) digest = m.final() mb = None # begin 和 end 是私钥 或者 公钥格式要求 begin = '-----BEGIN PRIVATE KEY-----\n' end = '\n-----END PRIVATE KEY-----' with open(os.path.join(os.getcwd(), r'private_key.pem'), 'rb') as f: # 读取pem文件内私钥的数据 pri_key = f.read() # 私钥数据是一行,因为对格式有要求,将它分解为多行,每64个字符一行 pri_key = [pri_key[i:i + 64] for i in range(0, len(pri_key), 64)] # 以BIO的方式读入内存,如果以直接读取文件 或者 读字符串的方式 会有其他错误,暂时以此方法避免 mb = BIO.MemoryBuffer(begin + "\n".join(pri_key) + end) if mb: key = RSA.load_key_bio(mb) result = key.sign(digest, 'sha1') # 将加密的密文从base64解为str类型 return result.encode('base64') else: raise 'error'



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3