Python使用Crypto/pyDes,DES并Base64编码_python des crypto-程序员宅基地

技术标签: Python DES加密  Python  

注意点

一、秘钥必须是8位
二、待加密的明文长度必须是8的倍数,不足则补空字符

第三方库

from Crypto.Cipher import DES
import base64

加密函数

def encrypt_des(cipher):
    if cipher is None:
        return ""
    try:
        key = '1234A#CD'
        # ECB方式
        generator = DES.new(key, DES.MODE_ECB)
        # 非8整数倍明文补位
        pad = 8 - len(cipher) % 8
        pad_str = ""
        for i in range(pad):
            pad_str = pad_str + chr(pad)
        # 加密
        encrypted = generator.encrypt(cipher + pad_str)
        # 编码得密文
        result = base64.b64encode(encrypted)
        print "cipher : "+str(cipher)+"  encrypted : "+result
        return result
    except Exception, e:
        print Exception, ":", e
        return ""

 

测试
print encrypt_des("1234567890")
输出
cipher : 1234567890  encrypted : jHgeV9zr6EVnSM7n7LG63g==

解密函数

def decrypt_des(encrypted):
    if encrypted is None:
        return ""
    try:
        key = '1234A#CD'
        # ECB方式
        generator = DES.new(key, DES.MODE_ECB)
        # 解码
        crypted_str = base64.b64decode(encrypted)
        # 解密
        result = generator.decrypt(crypted_str)
        # 替换非空格字符(诡异的串)
        result = result.strip("�����")
        result = result.strip("������")
        print "encrypted : "+str(encrypted)+"  cipher :"+result
        return result
    except Exception, e:
        print Exception, ":", e
        return ""

 

测试
print decrypt_des("jHgeV9zr6EVnSM7n7LG63g==")
输出
encrypted : jHgeV9zr6EVnSM7n7LG63g==  cipher :1234567890

第二种pyDes

为什么要说第二种,因为我在本地Python2.7通过pip安装Crypto始终安装不上. 遇到和我同样问题的朋友可以用该方式解决DES加解密

安装

pip install pyDes

引入

from pyDes import des, ECB, PAD_PKCS5
import base64

 

加密代码(注意输出结果要encode,不然打印出来是b'' 字节输出)

def des_encrypt(s):
    secret_key = '1234A#CD'
    iv = secret_key
    k = des(secret_key, ECB, iv, pad=None, padmode=PAD_PKCS5)
    en = k.encrypt(s.encode('utf-8'), padmode=PAD_PKCS5)
    return str(base64.b64encode(en), 'utf-8')

解密

def des_descrypt(s):
    secret_key = '1234A#CD'
    iv = secret_key
    k = des(secret_key, ECB, iv, pad=None, padmode=PAD_PKCS5)
    de = k.decrypt(base64.b64decode(s), padmode=PAD_PKCS5)
    return de

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_35381464/article/details/100007568

智能推荐

arcgis NoData区域去除(去除影像黑边)_arcmap栅格数据导png时nodata变黑边-程序员宅基地

文章浏览阅读8.7k次,点赞9次,收藏57次。问题描述:裁剪操作或其他一些操作后影响会出现NoData区域,在制图时不好看。如下图红色区域为NoData区域,更改Arcgis显示设置无效A:方法是ArcTools->Spatial Analyst Tools->Map Algebra->Single Output Map Algebra(就是栅格计算器).算法表达式为: Con(IsNull([raster]),0,[raster])。注意大小写其中[raster]是输入栅格名称。这个表达式的效果是将图像中N._arcmap栅格数据导png时nodata变黑边

Java中的native方法的使用_native修饰方法-程序员宅基地

文章浏览阅读7.9k次,点赞25次,收藏106次。1.关于native关键字想必读者已经了解过native关键字了。这里笔者就大致囊括一下,被native关键字修饰的方法叫做本地方法,本地方法和其它方法不一样,本地方法意味着和平台有关,因此使用了native的程序可移植性都不太高。另外native方法在JVM中运行时数据区也和其它方法不一样,它有专门的本地方法栈。native方法主要用于加载文件和动态链接库,由于Java语言无法访问操作系统底层信息(比如:底层硬件设备等),这时候就需要借助C语言来完成了。被native修饰的方法可以被C语言重写。2.使_native修饰方法

Thread类-程序员宅基地

文章浏览阅读1.3w次,点赞7次,收藏60次。 1 start方法  start()用来启动一个线程,当调用start方法后,系统才会开启一个新的线程来执行用户定义的子任务,在这个过程中,会为相应的线程分配需要的资源。  2 run方法  run()方法是不需要用户来调用的,当通过start方法启动一个线程之后,当线程获得了CPU执行时间,便进入run方法体去执行具体的任务。注意,继承Thread类必须重写run方法,在run方法中定义具体要..._thread类

oracle数据落地到gp,使用ora2pg迁移oracle数据到greenplum-程序员宅基地

文章浏览阅读377次。安装ora2pg条件1、perl版本5.10以上2、安装DBD::Oracle3、安装DBI4、安装DBD::Pg一、安装相关软件支持1、安装DBI#下载https://metacpan.org/release/DBI上传到服务器并解压出来DBI-1.637.tar.gz[ root@bigdata01 ~]$ lltotal 592-rw-r--r-- 1 gpadmin gpadmin 596..._ora2pg greenplum

UVA 1411 Ants 二分图最佳完美匹配_给定一个二分图,该二分图有 nn 个黑点与 nn 个白点-程序员宅基地

文章浏览阅读370次。UVA 1411题意:有n个白点和n个黑点,要求用n条不相交的线段把他们连接起来,其中每条线段恰好连接一个白点和一个黑点。思路:连接两点a1和b1,如果还有其他的线段a2,b2相连与之相交,必有dist(a1,b1)+dist(a2,b2)大于dist(a1,b2)+dist(a2,b1),原因是两条相交线段构成了几个三角形,三角形性质有两边之和必大于第三边,所以,如果每条线段都没有与之相..._给定一个二分图,该二分图有 nn 个黑点与 nn 个白点

TensorFlow学习2:使用自己的数据批量训练网络_tensorflow 实现简单的批处理训练例子-程序员宅基地

文章浏览阅读1k次。使用自己的数据训练网络时,需要用到两个函数:tf.train.slice_input_producer、tf.train.batch和两个类tf.train.Coordinator和tf.QueueRunner。参考博客:tensorflow中 tf.train.slice_input_producer 和 tf.train.batch 函数和tensorflow中协调器 tf.train.Co..._tensorflow 实现简单的批处理训练例子

随便推点

JavaWeb-通过表格显示数据库的信息(jsp+mysql)_javaweb数据库数据显示在表单-程序员宅基地

文章浏览阅读1.2w次,点赞14次,收藏113次。login.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head&gt_javaweb数据库数据显示在表单

异常账号检测汇总_异常登录数据集-程序员宅基地

文章浏览阅读2.5k次。账户异常检测_异常登录数据集

windows上编译,使用libtorrent_windows libtorrent怎么用-程序员宅基地

文章浏览阅读3.2k次,点赞2次,收藏4次。花了几天的时间,查找了很多资料,基本上没有找到能够编译成功教程特留下此篇博客已做参考:windows编译libtorrent需要依赖于OpenSSL库,和boost库,建议直接下载一. 编译OpenSSL的库 编译OpenSSL网上教程一大堆,自己去找,我这里不介绍 编译好的OpenSSL库下载地址二. 编译boost库 参考地址:https..._windows libtorrent怎么用

第37讲:MySQL索引结构之B-Tree和B+Tree数据结构的概念_- mysql数据库中的b+树,b-树结构-程序员宅基地

文章浏览阅读3.2k次,点赞26次,收藏16次。现在的节点中有四个数据,再插入一个22之后,按照从小到大的顺序,22会放在50的前面,这样一来节点中就有5个key了,违背了5阶的概念,此时就会取中间元素,向上分裂,中间元素也就是中间数,60就是中间元素,60就向上分裂,形成一个新的节点,剩下的4个key也会分裂成两个子节点。插入22这个数据,观察效果,就如刚刚说的,第五个key进入节点后,不满足5阶的概念,中间元素向上分裂,60是中间元素,直接向上分裂,形成一个新的节点,其余的4个key成为新节点中的子节点。_- mysql数据库中的b+树,b-树结构

RPA教学:Python“奇怪的“&“特殊的“数字字符串处理_影刀rpa处理特殊字符串-程序员宅基地

文章浏览阅读422次。了解RPA:www.i-search.com.cn学习RPAhttps://support.i-search.com.cn/下载RPA:https://www.i-search.com.cn/?from=csdn众所周知,在某些特殊情况下,有些人会使用各种奇奇怪怪的符号来表示数字。例如有些人写自己的 QQ 号,是这样写的:加暁眉扣:玖壹五捌⑦二Ⅲ9再不久前我是这样创建一个字典并写一个转换方法来对其进行处理:{‘一’: 1,‘壹’: 1, ‘①’: 1,‘二’: 2, ‘三’: 3, …}_影刀rpa处理特殊字符串

element-ui使用axios获取并下载流文件到本地_elementui下载文件到本地-程序员宅基地

文章浏览阅读1k次。首先使用axios发送一个GET请求,并将其响应类型设置为“stream”。这将使axios返回一个包含可读流的响应对象。我们然后创建一个可写流,并将响应数据流(pipe)到可写流中。最后,我们返回一个Promise,以便在下载完成时进行通知。当Promise被resolve时,文件将下载到本地磁盘,并且可以使用相应的路径访问。如果下载过程中发生错误,Promise将被reject,并且在控制台上将打印出错误消息。_elementui下载文件到本地

推荐文章

热门文章

相关标签