`
annan211
  • 浏览: 466626 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

python aes加密

 
阅读更多

#--coding:utf-8--

#--引入连接数据库模块--
import logging
import json
import re
import urllib
import datetime
import pymongo
import csv
import uuid

from timeutil import *
from pymongo import *
from util import *
#--引入连接数据库模块结束--



#--引入加密模块--
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
from Crypto import Random
 #--引入加密模块结束--

class prpcrypt():

    def __init__(self,key):
        self.key = key
        self.mode = AES.MODE_CBC

    #加密函数,如果text不足16位就用空格补足为16位,
    #如果大于16当时不是16的倍数,那就补足为16的倍数。
    def encrypt(self,text,ran):
        cryptor = AES.new(self.key,self.mode, ran)
        #这里密钥key 长度必须为16(AES-128),
        #24(AES-192),或者32 (AES-256)Bytes 长度
        #目前AES-128 足够目前使用
        length = 16
        count = len(text)
        if count < length:
            add = (length-count)
            #\0 backspace
            text = text + ('\0' * add)
        elif count > length:
            add = (length-(count % length))
            text = text + ('\0' * add)
        self.ciphertext = cryptor.encrypt(text)
        #因为AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题
        #所以这里统一把加密后的字符串转化为16进制字符串
        return b2a_hex(self.ciphertext)

    #解密后,去掉补足的空格用strip() 去掉
    def decrypt(self,text,ran):
        cryptor = AES.new(self.key, self.mode,ran)
        plain_text  = cryptor.decrypt(a2b_hex(text))
        return plain_text.rstrip('\0')

key = '1234567890123456'
pc = prpcrypt(key) #初始化密钥

# 本函数循环迭代出member对象 进行修改
def updateMemberInfoMobiles(key,iv):
    #--迭代member--
    db = getCRMMongoDb();
    nums = db.member.count();
    idMap = {};
    collections = db.member.find();
    for r in collections:
        if(not r.has_key('mobile')):
            continue;
        if (r['mobile'].strip() == '' or r['mobile'] == None):
            continue;
        mobStr = r['mobile'].strip().encode('ascii', 'ignore')
        #--对mobile进行加密并更新对象--
        e = pc.encrypt(mobStr,iv);
        idMap[r['memberId']] = e;
    count = 0;
    for k,v in idMap.items():
        db.member.update({'memberId':k},{'$set':{"mobile":v}})
        count += 1;
        print "count = %d"%count;


def main():
    import sys
    iv  = "fedcba9876543210"
    updateMemberInfoMobiles(key,iv);

main();



此程序执行完毕  只要密钥 key 和 IV 保持一直 其他程序可以完成解密
分享到:
评论

相关推荐

    python之AES加密解密源码

    **Python3中的AES加密解密** 在信息安全领域,数据加密是一种常见的保护措施,用于保护敏感信息免受未经授权的访问。AES(Advanced Encryption Standard),即高级加密标准,是目前广泛使用的对称加密算法之一。它...

    Python AES 加密

    简单AES类,实现AES加密/解密,需要pycrypto支持.

    Python AES加密实例解析

    在Python中,我们可以利用`pycryptodome`库来实现AES加密。这个库包含了`Crypto.Cipher.AES`模块,用于处理AES加密和解密操作。在上述代码中,我们创建了一个名为`MyCrypto`的类,该类实现了AES加密和解密功能。 ...

    python AES加密解密,key的长度不受限制

    本篇文章将深入探讨AES加密解密机制以及在Python中的实现,同时也会提及关于key长度的相关知识。 AES加密的基本原理是通过一系列复杂的数学运算(如字节替换、行位移、列混淆和轮密钥加)将明文转换为密文。标准AES...

    Python AES加密模块用法分析

    Python AES加密模块是用于实现高级加密标准(AES)的工具,它提供了一种强大的数据保护机制,适用于存储和传输敏感信息。AES是一种分组密码,以128位的数据块为单位进行加密和解密,支持128、192和256位的密钥长度。...

    python实现AES加密解密

    本文实例为大家分享了python实现AES加密解密的具体代码,供大家参考,具体内容如下 (1)对于AES加密解密相关知识 (2)实现的功能就是输入0-16个字符,然后经过AES的加密解密最后可以得到原先的输入,运行的结果...

    Python加密与解密

    Python中可以使用PyCrypto或cryptography库实现AES加密解密。 2. RSA:RSA是非对称加密算法,用于公钥基础设施(PKI)。它包含一对密钥——公钥和私钥,公钥用于加密,私钥用于解密。 3. SHA哈希:SHA(安全哈希算法...

    Python AES和Java AES/ECB/PKCS5Padding互转

    轻松实现 Python AES和Java AES/ECB/PKCS5Padding互转

    AES 加密算法详解

    整理的AES算法,包括小刀人翻译的版本和英文版本,供参考

    python基于AES加密算法.zip

    python基于AES加密算法.zippython基于AES加密算法.zippython基于AES加密算法.zippython基于AES加密算法.zippython基于AES加密算法.zippython基于AES加密算法.zippython基于AES加密算法.zippython基于AES加密算法....

    Python程序设计:AES数据加密.pptx

    在Python中,我们可以使用第三方库如`Crypto`来实现AES加密和解密。`Crypto`模块提供了丰富的加密和哈希算法,包括AES。然而,需要注意的是,`Crypto`并非Python标准库的一部分,因此在使用之前需要先通过pip等工具...

    python3-AES128:使用ECB模式的AES-128加密

    2. **创建AES对象**:使用`pycryptodome.Cipher`库的`AES.new()`方法创建一个AES加密器实例,传入密钥和工作模式ECB,例如`cipher = AES.new(key, AES.MODE_ECB)`。 3. **填充数据**:AES加密要求输入数据长度是16...

    java,php,python AES 加解密互通

    6. Python的`cryptography`库:提供AES加密和解密功能。 7. 跨语言互通:确保不同编程环境下的加解密参数一致,以实现数据的解密。 8. 密钥管理:如何安全地存储和共享密钥,以确保通信的安全性。 以上就是关于...

    python aes算法库

    Python AES(Advanced Encryption Standard)算法库是用于加密和解密数据的强大工具,它基于标准的AES规范,提供了在Python环境中实现AES加密算法的各种功能。AES是一种块密码,它使用固定大小的128位(16字节)块对...

    python版AES加密解密,适配java

    该文件用来对字符串和文件进行AES加密解密使用,由于服务器常用java写,所以一般是服务器端的加密,到本地的解密。该解密适配java的加密解密

    AES加密算法(附带教程)

    本教程旨在通过简洁明了的方式,帮助你理解和掌握AES加密算法。 首先,AES的工作原理基于替换和置换两大部分,包括字节代换、行移位、列混淆和轮密钥加四个步骤。这些操作在128位的数据块(称为状态)上进行,其中...

    python实现AES加密与解密

    AES加密方式有五种:ECB, CBC, CTR, CFB, OFB 从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现 python 在 Windows下使用AES时要安装的是pycryptodome 模块  pip install pycryptodome ...

    AES 加密BMP图片

    AES加密技术通过一系列复杂的数学运算将原始数据转换成不可读的形式,只有拥有正确密钥的人才能解密并恢复数据的原貌。 在本案例中,"AES 加密BMP图片"是指使用AES算法来对位图(BMP)文件进行加密的过程。BMP是一...

Global site tag (gtag.js) - Google Analytics