python---的各种算法

2023-11-03

今天来聊聊python中的算法,比如AES,DES,RSA.......

1.MD5加密

md5是一个大的hash算法,它不存在解密的逻辑,市面上所为的解密是通过撞库来实现的.

我们可以简单的理解为生活中的防伪码

(1).不加salt----------简单理解为密钥

from hashlib import md5 
obj=md5()               
#准备加密的内容   #密钥也必须是字节
password="dasdas"   #update给的必须是字节
obj.update(password.encode("utf-8"))#encode("utf-8"):把字符串变为字节
#获取秘文
miwen=obj.hexdigest()
print(miwen)   #89defae676abd3e3a42b41df17c40096
    

(2).加salt

from hashlib import md5 

salt=b"dsadasdasdasdasdasd"  #密钥也必须是字节
obj=md5(salt)
#准备加密的内容
password="dasdas"   #update给的必须是字节
obj.update(password.encode("utf-8"))#encode("utf-8"):把字符串变为字节
#获取秘文
miwen=obj.hexdigest()
print(miwen)   
    #加密后的0dfcc23994e6e7c63783ba4eb13d6a5c

2.base64

“Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法”。

(1).为什么会有 Base64 编码呢?

因为有些网络传送渠道并不支持所有的字节,例如:传统的邮件只支持可见字符的传送,像 ASCII 码的控制字符就不能通过邮件传送。这样用途就受到了很大的限制。

图片的二进制流的每个字节不可能全部是可见字符,这就导致图片的二进制流无法传送。最好的解决方式就是在不改变传统协议的情况下,做一种扩展方案来支持二进制文件的传送。即把不可打印的字符也能用可打印字符来表示,问题就解决了。

import base64
bs="我要吃饭了".encode("utf-8")
s=base64.b64encode(bs)
print(s)   # b'5oiR6KaB5ZCD6aWt5LqG'
"""
变为base64字节的形式,
base64主要是要来处理字节的
把字节按照base64的规则,进行编码,编码成base64字符串形式
传入的内容必须是字节的形式
"""

import base64
bs="我要吃饭了".encode("utf-8")
#base64主要是要来处理字节的
#把字节按照base64的规则,进行编码,编码成base64字符串形式
s=base64.b64encode(bs).decode("utf-8")
print(s)   #5oiR6KaB5ZCD6aWt5LqG

encode编码:字符串变为字节

decode解码:字节变为字符串

3.AES

(1).加密

import base64
from Crypto.Cipher import AES
s="这个是我要加密的明文"  #要加密的东西必须是16的倍数
key=b"dasdasdasdasasdx"  #key必须是16  24  32 为
aes=AES.new(key=key,mode=AES.MODE_CBC,IV=b"0102030405060708")#ebc一般不需要给iv
bs=s.encode("utf-8")
que=16-len(bs)%16  #缺少字节的个数
bs+=(que*chr(que)).encode("utf-8")
resp=aes.encrypt(bs)  #加密的内容必须是字节  #encrypt:加密
b64=base64.b64encode(resp).decode("utf-8")
print(b64)

注意:加密的内容必须是16的倍数

这里提供一个好的包 from Crypto.Util.Padding import pad,

import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
s="这个是我要加密的明文"  #要加密的东西必须是16的倍数
key=b"dasdasdasdasasdx"  #key必须是16  24  32 为
aes=AES.new(key=key,mode=AES.MODE_CBC,IV=b"0102030405060708")#ebc一般不需要给iv
bs=pad(s.encode(),16)
resp=aes.encrypt(bs)  #加密的内容必须是字节  #encrypt:加密
b64=base64.b64encode(resp).decode("utf-8")
print(b64)

结果是一样的

提供一个函数,使用时也可以copy

def to_16(data):
    pad_len = 16-(len(data) % 16)
    data+=(chr(pad_len) * pad_len).encode("utf-8")
    return data
import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
s="这个是我要加密的明文"  #要加密的东西必须是16的倍数
key=b"dasdasdasdasasdx"  #key必须是16  24  32 为
aes=AES.new(key=key,mode=AES.MODE_CBC,IV=b"0102030405060708")#ebc一般不需要给iv
bs=to_16(s.encode())
resp=aes.encrypt(bs)  #加密的内容必须是字节  #encrypt:加密
b64=base64.b64encode(resp).decode("utf-8")
print(b64)

(2).解密

from Crypto.Cipher import AES
import base64
miwen="TB2i3MKyp6lYmtO7qfX6ao7ytbeSWMn0z48iGtLjSV0="
key=b"dasdasdasdasasdx"
aes=AES.new(key=key,mode=AES.MODE_CBC,IV=b"0102030405060708")#ebc一般不需要给iv
bs=base64.b64decode(miwen)
resp=aes.decrypt(bs).decode()   #decrypt:解密
print(resp)
如果aes进行的加密,拿就不可以进行解密,必须重新写

4.DES

这个在写法上面和aes差不多,上代码

(1).加密

from Crypto.Cipher import DES
s="我爱黎明"
des = DES.new(b'alexissb',mode=DES.MODE_CBC,IV=b'01020304')
bs = s.encode("utf-8")
que = 8 - len(bs)% 8 # 缺少字节的个数
bs += (que * chr(que)).encode('utf-8')
result = des.encrypt(bs)
print(result)  #\xf3\xe0iI\xb5\x7f:1\xa4\xe9\x8e\xbamcR\x96

同样的这个也需要填充16位, 

(2).解密

from Crypto.Cipher import DES
miwei=b"\xf3\xe0iI\xb5\x7f:1\xa4\xe9\x8e\xbamcR\x96"
aes = DES.new(b'alexissb',mode=DES.MODE_CBC,IV=b'01020304')
resp=aes.decrypt(miwei).decode("utf-8")
print(resp.strip(""))

5.RSA

(1).使用rsa生成密钥(公钥和私

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python---的各种算法 的相关文章

随机推荐

  • 两个数组的交集、有效的完全平方数、字符串中的第一个唯一字符

    Java学习路线 搬砖工逆袭Java架构师 简介 Java领域优质创作者 CSDN哪吒公众号作者 Java架构师奋斗者 百日刷题计划 第 14 100 天 扫描主页左侧二维码 加入群聊 一起学习 一起进步 欢迎点赞 收藏 留言 位于半山腰的
  • unity全免费下载资源网站

    www unityfly com unity项目源代码插件模型场景免费资源学习分享 unity爱心飞扬下载站 本站建立的初心是 为兄弟姐妹们 学习unity游戏应用开发 免费提供便利和支持 欢迎光临本站
  • Java几种常见的设计模式

    本文来自 旭日Follow 24 的CSDN 博客 全文地址请点击 https blog csdn net xuri24 article details 81106656 utm source copy 一 单例模式 基本概念 保证一个类仅
  • 关于在Idea调试的时如何显示16进制的处理

    关于在Idea调试的时如何显示16进制的处理 右击字节数组 然后选择 View as 再选择 Create 添加对byte 的处理 给个名称 并给个表达式 处理表达式如下 int len this length StringBuilder
  • 悦起无盘客户端怎么连服务器,Staxel怎么联机 直连以及服务器连接教程

    手机游戏自身是适用联网一起玩的 不如说是联网才有趣 假如你不清楚怎样联网得话 看一下大家为大伙儿产生的Staxel怎么联机的实例教程吧 手机游戏自身是适用联网一起玩的 不如说是联网才有趣 假如你不清楚怎样联网得话 看一下大家为大伙儿产生的S
  • CSS核心使用

    CSS核心使用 box sizing box shdow text shadow position writing mode box sizing 定义计算一个元素的总高度和总宽度 属性值 content box 默认值 width 内容宽
  • PHP面向对象

    static静态关键字 声明类特点和办法为静态 不能够经过类的实例直接拜访 类的静态特点不能经过 gt 直接拜访 能够经过 o b j obj obj name来拜访 静态办法能够经过类的实例来拜访
  • RGB与YCBCR转换及代码

    一 目的意义 在某些图像 视频中 经过一些图像处理之后 计算机对于处理后的图像仍然不能直白的检测出所需要的信息 这时候需要对某类色彩进行处理 使得所需要的信息更能直观的在处理后的图像显示出来 二 RGB YCBCR简介及公式转化 RGB R
  • 嘉立创的PCB外形规则解读

    终极标准 某D系列软件外形层及非金属化孔及槽的标准及规范 对于大部分用某D设计的工程师都是乱用KEEPOUT层及机械层 导致PCB工厂CAM工程师傻傻的分不清 造成漏开或多开非金属化孔及非金属化槽的现象时有发生 特此确定以下标准 如果标准相
  • OAM协议详解

    原文地址 https blog csdn net xinyuan510214 article details 79218004
  • CLIP论文解读

    文章目录 问题 方法 自然语言监督 数据集 有效预训练方法 模型选择 实验 Zero Shot Transfer 结论 论文 Learning Transferable Visual Models From Natural Language
  • 遗传算法(一) 遗传算法的基本原理

    遗传算法 一 遗传算法的基本原理 1 概述 遗传算法 Genetic Algorithm GA 起源于对生物系统所进行的计算机模拟研究 它是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法 借鉴了达尔文的进化论和孟德尔的遗传学说 其本
  • 【Docker】如何运行容器?

    文章目录 容器操作 容器相关命令 创建并运行一个容器 docker命令解析 nacos启动成功 访问 进入容器 修改配置文件 总结 接上集 CentOS 7安装Docker https blog csdn net qq 39017153 a
  • unity中通过www加载外部音频

    IEnumerator DownloadVoice string url WWW w new WWW url yield return w 将声音资源赋值为外部加载的声音即可 myclip w audioClip 加载ogg格式的音频 au
  • 视频分类(Classification)和摘要(Captioning)总结

    想象力比知识更重要 爱因斯坦 论文 Deep Learning for Video Classification and Captioning 视频分类是指将大量的视频数据按照一定的标准和规则进行分类和归类 以便于用户快速找到自己感兴趣的视
  • 【MySQL】不就是子查询

    前言 今天我们来学习多表查询的下一个模块 子查询 子查询包括了标量子查询 列子查询 行子查询 表子查询 话不多说我们开始学习 目录 前言 目录 一 子查询 1 子查询的概念 2 子查询语法格式 2 1 根据子查询结果不同可以分为 2 2 根
  • 51单片机开发系列一-51单片机开发环境搭建以及入门汇编代码

    51单片机开发系列一 51单片机开发环境搭建以及入门汇编代码 象棋小子 1048272975 1 51单片机概述 51单片机是对所有兼容Intel 8031指令系统的单片机的统称 目前教科书基本都是以早期的MCS 51为原型 讲解微机的原理
  • Java上传Excel文件并解析入库,数据生成Excel文档(知识点满满)

    原因 我们经常会遇到甲方给数据是excel格式的数据 当然Navicat是支持导入excel的但是遇到客户想要自己上传Excel入库数据就要手动进行写代码了 一 解析Excel入库 param request param response
  • YOLOV7训练自己的数据集以及训练结果分析(手把手教你)

    YOLOV7训练自己的数据集以及训练结果分析 手把手教你 YOLOV7训练自己的数据集整个过程主要包括 环境安装 制作数据集 参数修改 模型测试 模型推理 一 环境安装 conda create n yolov7 python 3 8 co
  • python---的各种算法

    今天来聊聊python中的算法 比如AES DES RSA 1 MD5加密 md5是一个大的hash算法 它不存在解密的逻辑 市面上所为的解密是通过撞库来实现的 我们可以简单的理解为生活中的防伪码 1 不加salt 简单理解为密钥 from