首页 > 编程语言 >Mac Catalina安装Python版本Crypto

Mac Catalina安装Python版本Crypto

时间:2023-08-20 17:36:17浏览次数:58  
标签:编码 AES Catalina 传输 Python text Crypto 二进制 msg

在PyCharm 2020+VirtualEnvs环境下使用如下命令,在Mac Catalina上成功安装Crypto模块:

pip3 install pycrypto

Mac Catalina安装Python版本Crypto_Crypto

示例

'''
Just for test AES algorithm in Python
'''
import base64
from Crypto.Cipher import AES

def add_to_16(value):
    while len(value) % 16 !=0:
        value+='\0'
    return str.encode(value)

def encryption(text):
    key='China1949'
    aes=AES.new(add_to_16(key), AES.MODE_ECB)
    e=aes.encrypt(add_to_16(text))
    e_text=str(base64.encodebytes(e), encoding='utf-8')
    return e_text

def decryption(text):
    key='China1949'
    aes=AES.new(add_to_16(key), AES.MODE_ECB)
    b=base64.decodebytes(text.encode(encoding='utf-8'))
    d=str(aes.decrypt(b), encoding='utf-8').replace('\0','')
    return d


if __name__=='__main__':
    plain_msg='[email protected]'
    en_text=encryption(plain_msg)
    print("Encrypted msg: ", en_text)

    de_text=decryption(en_text)
    print("Decrypted msg: ", de_text)

注释:

借助base64.encodebytes(s)方法,我们可以将使用 base64 编码数据的字符串编码为二进制形式。

Base64编码非常适合处理二进制数据在传输过程中的问题。比如,当一个文件需要在网络上进行传输时,如果直接传输二进制数据,会面临如下问题:

  • 二进制数据中可能包含不可打印的字符,无法在网络上直接传输;
  • 二进制数据可能会被改变或者破坏,导致传输的内容与原始内容不一致;
  • 传输的数据量很大,可能会导致网络拥堵。

而Base64编码可以将二进制数据转换为可打印的字符集合,解决了上述问题。此外,Base64还常被应用于邮件附件、网页图片和XML文件的编码。

Base64编码的优点是能够将二进制数据转换为可打印的字符,适用于网络传输和数据存储。其缺点是编码后的数据比原数据大1/3左右,导致传输的数据量增加。同时,Base64编码只能将原始二进制数据转换为ASCII字符,不支持将二进制数据转换为Unicode字符。

运行结果

Encrypted msg:  ekdsZjYstiSlJ9J/nVKkew/b6qo5uwKXVfgG3pLCPdQ=

Decrypted msg:  [email protected]


参考

https://www.jianshu.com/p/0f35cc2f8455

https://www.imangodoc.com/dacfa7dc.html

标签:编码,AES,Catalina,传输,Python,text,Crypto,二进制,msg
From: https://blog.51cto.com/zhuxianzhong/7162425

相关文章

  • python进程池的阻塞和非阻塞
    进程池概念:当需要上百上千个目标时,手动创建进程工作量大,此时就可以用到multiprocessing模块中提供的pool方法。初始化pool时,可以指定一个最大的进程数,当有新的请求提交到pool中时,如果pool还没有满,那么就会创造一个新的进程用于执行该请求。如果pool中的进程数满了,那么就需要等......
  • python字符串的定义和表示及使用语法
    Python中字符串是由字符组成的不可变序列。字符串可以用单引号(')或双引号(")括起来表示。例如:s1='HelloWorld's2="PythonProgramming"Python还支持原始字符串,原始字符串以前缀r或R开头,可以包含转义字符但不会被解析。例如:s3=r'C:\Users\name\Documents'在字符串中可......
  • 「Python」第一阶段第七章笔记
    函数的多返回值"""函数的多返回值"""defmy_return():return1,2x,y=my_return()print(x,y,type(x),type(y))函数的多种传参方式"""函数的多种传参方式-位置-参数-缺省-不定长"""#位置传参形参实参位置对应defadd(a=0,b=0)......
  • 「Python」第一阶段第五章笔记
    函数的初体验"""函数的初体验"""name="OrzMiku"print(f"{name}这个名字有{len(name)}个字符长")函数的定义"""函数的定义def函数名(参数表):函数体return返回值"""defsayHello():print("HelloW......
  • 「Python」第一阶段第二章 笔记
    字面量#字面量:写在程序中固定的值print(114514)print(1919810)print("HelloWorld")注释"""Python中的多行注释"""print("多行注释用三个引号开头三个引号结尾")#Python中的单行注释print("单行注释以井号开头")变量"""变量名=变量值&......
  • 「Python」第一阶段第三章笔记
    布尔类型和比较运算符"""跳过"""if语句基本格式"""if语句基本格式if条件:代码块"""age=int(input("请输入你的年龄:"))ifage>=18:print("老东西速速爆金币!")quit()print("小东西给我磕一个!")......
  • 「Python」第一阶段第四章笔记
    while循环"""while条件:代码块"""num=255;#python没有++和--whilenum:print(num)num-=1for循环for基础语法"""for循环(感觉更像是一个foreach循环)for临时变量in序列类型:代码块"""name="OrzMiku......
  • python之multiprocessing模块的Process
    python之进程概述:python进程是程序中执行的程序,每个进程都有自己的地址空间。进程:资源分配的最小单位。线程:程序执行的最小单位。协程:协程完全由程序所控制在电脑程序中一般进程>线程>协程,进程中可以包含多个线程,线程中可以包含多个协程。在执行多进程或多线程的时候,当cpu有......
  • Python selenium 的日常使用示例
    importos.pathimporttimefromseleniumimportwebdriverfromselenium.webdriver.common.keysimportKeysfrombs4importBeautifulSoup#创建一个Firefox浏览器实例,需要提前下载好文件,设置好环境变量#Chrome:https://sites.google.com/a/chromium.org/chromed......
  • 「Python」第二阶段第一章笔记
    初识对象"""初识对象"""#1.设计一个类classStu:name=None#学生姓名gender=None#学生性别nationality=None#学生国籍native_place=None#学生籍贯age=None#学生年龄#2.创建一个对象stu_1=Stu()#3.对象属性进行赋......