mac无法使用Crypto.Cipher import AES

1、python查看项目和python版本的地址

新建python文件

输入:

import sys
print(sys.path)

2、Mac查看Python3的安装路径

which python3

3、Mac如何进入路径


然后输入路径

4、Mac-Pycharm-python3.8

from Crypto.Cipher import AES总是失败
https://blog.csdn.net/sinat_38695417/article/details/109291892?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ETopBlog-1.topblog&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ETopBlog-1.topblog&utm_relevant_index=1
https://blog.csdn.net/RIN233/article/details/111383346?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3.pc_relevant_antiscanv2&utm_relevant_index=6
在Pycharm里面也无法导入Crypto.Cipher包,原因是
1、Crypto.Cipher包需要自己的python版本的文件夹自己有(由于我只有Conda会显示完整的python文件夹,pycharm自己生成的python版本只是一个文件,没有文件夹,找不到site-packages文件夹)
所以我让项目使用anaconda3的python版本。
1、在mac终端输入:
pip3 install pycryptodome
注意:我的mac默认python编译器是anaconda3的,所以pycryptodome会直接下载到Conda。

2、查看python文件里面的site-packages

首先查看anaconda3的地址:终端输入:which python3

(base) yaochen@YaodeMacBook-Air ~ % which python3
/Users/yaochen/opt/anaconda3/bin/python3

然后在访达中查找文件Crypto:左上角的前往-前往文件夹-输入:/用户/yaochen/opt/anaconda3/lib

然后一步步点击,发现Crypto路径如下:

/Users/yaochen/opt/anaconda3/lib/python3.9/site-packages/Crypto

然后在pycharm中项目使用anaconda3的python

需要先导入pycryptodome

python 在 Windows下使用AES时要安装的是pycryptodome 模块
pip install pycryptodome

python 在 Linux下使用AES时要安装的是pycrypto模块
pip install pycrypto

3、现在可以使用 Crypto.Cipher import AES

# coding:utf-8
import base64
from Crypto.Cipher import AES

class AESCrypt:
    def __init__(self,key,mode,iv):
        self.key = key # 密钥
        self.mode = mode # 模式
        self.iv = iv #初始化向量

    def encrpyt(self,text):
        '''加密'''

        num = AES.block_size - len(text) % AES.block_size #需要填充的字符个数
        text_pad = (text + num*chr(num)).encode('utf-8') #填充后的字节串
        crpytor = AES.new(self.key, self.mode, self.iv)
        encrypt_data = crpytor.encrypt(text_pad) #对数据进行加密
        return base64.b64encode(encrypt_data).decode()

    def decrypt(self,text):
        '''解密'''

        data = base64.b64decode(text.encode())
        crpytor = AES.new(self.key, self.mode, self.iv)
        decrypt_data = crpytor.decrypt(data) #对数据进行解密
        res = decrypt_data[:-decrypt_data[-1]].decode()#去除多余字符
        return res


if __name__ == '__main__':
    #key = random._urandom(16) 可以利用random模块随机生成
    key = b'\xc7(\xa4rq{\x89r\xd05kH\xbf^\x8a\x16' #密钥,长度可以是16,24或32个字节
    mode = AES.MODE_CBC
    iv = b'-\x95)\x82\x1a\x00\xde/^:\xd3\xbeXK9\xd2' #初始化向量,固定16个字节长度
    aes = AESCrypt(key,mode,iv)
    text = input('请输入需要AES加密的数据:')
    en_data = aes.encrpyt(text)
    print('%s 经过加密得到:%s'%(text,en_data))
    de_data = aes.decrypt(en_data)
    print('%s 经过解密得到:%s'%(en_data,de_data))

 

posted @ 2022-04-22 09:30  saaas  阅读(215)  评论(0编辑  收藏  举报