美文网首页
python md5、base64加密

python md5、base64加密

作者: 阿登20 | 来源:发表于2020-09-03 17:33 被阅读0次

严格来说:base64 和md5都不是加密算法。因为没有密钥。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
===========================
# @Time : 2020/9/3 11:47
# @File  : MD5_.py
# @Author: adeng
# @Date  : 2020/9/3
============================
"""

import hashlib

# 01  MD5加密
name = "阿登"
# unicode 转码成 utf8
name = name.encode("utf-8")
# 或者
# bytes(name,encoding="utf-8")

# 实例化md5加密算法对象
md5 = hashlib.md5()
md5.update(name) # name 这里字符串必须是bytes
print(md5.hexdigest()) # hexdigest() 十六进制显示
print(md5.digest())  # digest()是将加密结果以二进制显示

# 封装成一个函数

def md5_16(x:str) ->str:
    """
    return: 16进制显示结果
    """
    import hashlib
    md5 = hashlib.md5(x.encode("utf-8"))
    return md5.hexdigest()

def md5_2(x:str) ->str:
    """
    return: 二进制显示结果
    """
    import hashlib
    md5 = hashlib.md5(x.encode("utf-8"))
    return md5.digest()


md5_16("罗罗女神")  # 2d18f116f57e1ee19588a791b2def832
md5_2("罗罗小姐姐") # b'-\x18\xf1\x16\xf5~\x1e\xe1\x95\x88\xa7\x91\xb2\xde\xf82'

#--------------------------------------------------------------------#
# 02 base64加密
import base64
# -------开发做的加密过程------
# 1.需要加密的字符串,必须是bytes.纯英文可以这种形式:b'纯英文'
s = "阿登小哥哥"
# s = "阿登小哥哥".encode("utf-8")
# 2. 进行加密,返回一个加密后的对象

base_s = base64.b64encode(s.encode("utf-8"))
print(base_s) # b'6Zi/55m75bCP5ZOl5ZOl'

def base64_str(x):
    import base64
    return base64.b64encode(x.encode())

base64_str("乔木小姐姐") # b'6Zi/55m75bCP5ZOl5ZOl'

# -----base64 解密过程

base_str = base64_str("乔木小姐姐")

b = base64.b64decode(base_str)
b = b.decode()
print(b)

def base64_decode(x):
    import base64
    return base64.b64decode(x).decode()

base64_decode(b'6Zi/55m75bCP5ZOl5ZOl')

# 03 ----------通过md5,推到其他加密方式基本差不多如:sha1

s1 = "阿登00001"
# sha1 40位 16进制
sha11 = hashlib.sha1()
sha11.update(s1.encode())
print(sha11.hexdigest()) # a5e274c0332ef484ec64b3fedc03cd57a0172afc
print(len(sha11.hexdigest()))

# sha256 64位 16进制。
sha256 = hashlib.sha256()
sha256.update(s1.encode())
print(sha256.hexdigest()) # ab52041a93da347330a3c7b366192f0281cae7e7f46aa399dc174b14729911b8
print(len(sha256.hexdigest()))

# sha256 128位 16进制。
sha512 = hashlib.sha512()
sha512.update(s1.encode())
print(sha512.hexdigest()) # 1c624ba2b0b55c3fbeaddbd7355af12352a54564f1a284c2afc157dbe70e419bd5b1cc5032e2aa6ab687812510ae59b92198a1c04bbae93cccc4a9b8a7ea2b86
print(len(sha512.hexdigest()))


# ============ 场景 注册---》登录 -------------
"""
本xx.py文件相对路径 有1个db.txt,请事先建好。内容如下:
db.txt
adeng:6389facfcc60a2eb00f7a588ca873a02:admin
adeng1:6389facfcc60a2eb00f7a588ca873a02:admin
xiangjia:6389facfcc60a2eb00f7a588ca873a02:user

"""
# 判断用户是否在数据表,这里我用db.txt模拟
def user_is_exist(username):
    with open("db.txt", mode="rt", encoding="utf-8") as f1:
        for line in f1:
            user, pwd1, role = line.strip().split(":")
            if username == user:
                print(f'[{username}]用户已注册')
                return False
        print(f'[{username}]用户未注册')
        return True

# 判断密码长度是否在 [6,12]
def pwd_in_range(password):
    if 6 <= len(password) <= 12:
        return True
    else:
        if len(password) < 6:
            print("密码长度小于6位")
        else:
            print("密码长度大于12位")
        return False

#阶段1: 接收用户输入账号与密码,完成合法性校验
def talk():
    while True:
        username = input('请输入你的用户名: ').strip()
        if username.isalpha() and user_is_exist(username):
            break
        else:
            print('用户必须为字母')


    while True:
        password1 = input('请输入你的密码: ').strip()
        password2 = input('请再次输入你的密码: ').strip()

        if password1 == password2 and pwd_in_range(password1):
            break
        else:
            print('输入密码要么两次不一致,要么长度不在【6--12】')


    role_dic = {
        '1': 'user',
        '2': 'admin'
    }
    while True:
        for k in role_dic:
            print(k, role_dic[k])

        choice = input('请输入您的身份>>: ').strip()
        if choice not in role_dic:
            print('输入的身份不存在')
            continue
        else:
            role = role_dic[choice]
            break


    return username, password1, role


# 阶段2: 将账号密码拼成固定的格式
def register_interface(username, password, role):
    # 调用上面封装的md5_16()方法进行加密
    password = md5_16(password)
    format_str = '%s:%s:%s\n' % (username, password, role)
    return format_str


# 阶段3: 将拼好的格式写入文件
def handle_file(format_str, filepath):
    with open(r'%s' % filepath, 'at', encoding='utf-8') as f:
        f.write(format_str)


def register():
    user, pwd, role = talk()
    format_str = register_interface(user, pwd, role)
    handle_file(format_str, 'db.txt')


def login():

    inp_name = input("输入你的用户名:").strip()
    inp_pwd = input("输入你的密码:").strip()
    # 加密 pwd
    inp_pwd = md5_16(inp_pwd)
    with open(r"db.txt",mode="rt", encoding="utf-8") as f:
        for line in f :
            user,pwd,role = line.strip("\n").split(":")
            if user ==inp_name and pwd == inp_pwd:
                print("登录成功")
                break
        else:
            print("账号或者用户名输入错误")



register()
login()
# ------------------------------++++++++++++++++++-----------------------------
# 上面封装的md5_16()方法,还是有可能被逆转的,我们多传1个key

def md5_16(x:str,key="dyunren") ->str:
    """
    return: 16进制显示结果
    """
    import hashlib
    x = x +key
    md5 = hashlib.md5(x.encode("utf-8"))
    return md5.hexdigest()

print(md5_16("fsafafa110"))

md5 封装加一个key,提高安全性

# 上面封装的md5_16()方法,还是有可能被逆转的,我们多传1个key

def md5_16(x:str,key="dyunren") ->str:
    """
    return: 16进制显示结果
    """
    import hashlib
    x = x +key
    md5 = hashlib.md5(x.encode("utf-8"))
    return md5.hexdigest()

print(md5_16("fsafafa110"))

对文件进行md5加密

#-------文件内容进行加密---------需要获取文件的内容,即可-------
"""
adeng.txt 的内容是:
阿登好帅啊

"""

def md5_file(path):
    import hashlib,os
    if not os.path.isfile(path):
        raise TypeError(f"{path} 不是一个文件")
    with open(path,mode="rb") as f:
        md5 = hashlib.md5()
        for line in f:
            md5.update(line)
        return md5.hexdigest()

print(md5_file("adeng.txt"))

相关文章

  • python 加密解密

    Python 利用 pyDes对字符串进行解密 base64加密解密 md5加密

  • python加解密详情

    一、python加密方式 目前python支持的加密有一下几种方式: md5 base64 AES RSA 注意:...

  • 前端js几种加密/解密方法

    一、base64加密 base64的github地址 示例 二、MD5加密(不可逆) MD5加密的github地址...

  • iOS之加密解密

    base64与md5 base64 : 公开的代码加密,url加密md5:用户密码存储 文件校验 base64 1...

  • iOS开发之系统MD5加密

    常见的加密有Base64加密和MD5加密。Base64加密是可逆的,MD5加密目前来说一般是不可逆的。MD5生成的...

  • iOS常见信息加密方式总结

    目录 MD5加密HMAC加密base64加密对称加密RSA加密 - 非对称加密 一.MD5加密 MD5加密是最常用...

  • iOS 数据加密

    iOS 常用加密方式算法包括MD5加密、AES加密、BASE64加密 MD5加密 MD5:全称是Message D...

  • 两种加密方法

    base64和MD5加密 利用md5,和base64对应用中的敏感数据进行的加密和编码。 md5和base64的区...

  • iOS加密

    iOS代码常见的加密方式包括MD5加密、AES加密、BASE64加密,RSA加密。 MD5加密 MD5是不可逆的只...

  • iOS 关于加密

    常见的iOS代码加密常用加密方式包括Base64加密、MD5加密、AES加密、RSA加密等。 Base64加密 B...

网友评论

      本文标题:python md5、base64加密

      本文链接:https://www.haomeiwen.com/subject/ldsosktx.html