python3进行3des的加密解密


#
秘钥长度正常24位,16位补齐第一个八位 import pyDes import base64 print('=======key1=======') keys='1234567890123456' k = pyDes.triple_des(keys,pyDes.ECB, "\0\0\0\0\0\0\0\0",pad=None, padmode=pyDes.PAD_PKCS5) d = k.encrypt("137613") print(base64.b64encode(d)) e = k.decrypt(d) print(e) print('=======key2=======') keys2='123456789012345612345678' k2 = pyDes.triple_des(keys2,pyDes.ECB, "\0\0\0\0\0\0\0\0",pad=None, padmode=pyDes.PAD_PKCS5) d2 = k2.encrypt("137613") print(base64.b64encode(d2)) e2 = k.decrypt(d2) print(e2) print('=======key3=======') keys3='123456789090909090909090' k3 = pyDes.triple_des(keys3,pyDes.ECB, "\0\0\0\0\0\0\0\0",pad=None, padmode=pyDes.PAD_PKCS5) d3 = k3.encrypt("137613") print(base64.b64encode(d3)) e3 = k3.decrypt(d3) print(e3) #J01CKsP9aIcsXbqFmSYlbw==

 

#秘钥长度不正常10位,通过空字符来补齐,先加密再解密
import pyDes
import base64

keys='1234567890!'+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)
k = pyDes.triple_des(keys,pyDes.ECB, "\0\0\0\0\0\0\0\0" ,pad=None, padmode=pyDes.PAD_PKCS5)
d = k.encrypt("17862299")
print(d)
print(base64.b64encode(d))

e = k.decrypt(d)
print(e)
#jnjOe8CdrxROEwvCu58T4w==

#秘钥长度不正常10位,通过空字符来补齐,直接解密
import pyDes
import base64

keys='1234567890'+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)
k = pyDes.triple_des(keys,pyDes.ECB, "\0\0\0\0\0\0\0\0" ,pad=None, padmode=pyDes.PAD_PKCS5)
d='zzz3jP2U4ntEB+ECeykj6w=='
d=base64.b64decode(d)
e = k.decrypt(d)
print(e)

 

本文转载于网络 如有侵权请联系删除

相关文章

  • RabbitMq备胎交换器

    备胎交换器简称AE,生产者在发送消息的时候如果不设置mandatory参数,那么消息在未被路由的情况下将会丢失;如果设置了mandatory参数,那么需要添加reutrnListener的编程逻辑。生产者的代码将变得复杂,如果既不想复杂化生产者的编程逻辑,又不想消息丢失,那么可以备份交换器,这样可以将未被路由的消息存储在rabbitmq中,再需要的时候再去处理这些消息。我们可以在定义交换器的时候添加alternate-exchange参数来实现。Mapargs=newHashMap(); args.put(”alternate-exchange”,”b”); channel.exchangeDeclare(”a”,”direct”,true,false,args); channel.exchangeDeclare(”b”,”fanout”,true,false,null); channel.queueDeclare(”aa”,true,false,false,null); channel.queueDeclare(”b”,true,false,false,null); channel.

  • 网约车风云再起:“小窗口”和“大窗口”齐开

    文|智能相对论作者|陈壹由于众所周知的原因,近来网约车格局出现新突破口,行业发展迎来“窗口期”。看到机会的各大网约车平台,纷纷摩拳擦掌,直奔战场。有的原地“满血复活”,如两年前悄悄下架的美团打车App,近日已经重新上架,且同时在上海、北京、南京等34城招募司机。有的“加速行军”,如T3出行内部开启战斗模式,并紧急调整开城计划,欲在本月内连开15城。而几乎所有平台都在“拉新抢人”,各家纷纷推出优惠活动,争抢用户和运力。网约车二次大战就此开打,背后逻辑也不难理解。表面看,对其它网约车平台来说,这是一个抢夺市场份额的最佳窗口。毕竟在行业少了一个最强对手(至少战斗力受限)时下手,无论抢用户还是抢运力(司机),都是个千载难逢的好机会。更深层次看,此次事件背后释放了一个更重磅的信号——即经过多年发展的网约车行业,已经走到“合规化运营”的质变关键节点。变化即机会,这是一个更大的行业发展机遇。那么,问题来了,二次开打的网约车大战又有何不同?大战之后的网约车赛道,未来又将如何决胜?“窗口期”纷争再起,网约车“二次打车大战”有何不同?自2010年易到用车率先上线,拉开中国网约车序幕后,至今网约车在中国已发

  • 实验室一块GPU都没有怎么做深度学习?

    这个问题,5年前我也想问。还记得CVPR2015开完会回来,感觉大家都在讨论deeplearning,convolutionalneuralnetwork,当时觉得应该试试。我就用网上开源的LetNet在笔记本上训练了一下我们当时自己采集的数据集,结果完爆我们费尽心思手动设计的传统方法。我当时就鼓动我老板,让她给实验室买个带GPU的机器。结果她语重心长地说:"你看实验室这些旧电脑,我之前给每一个PhD学生都配一台电脑,结果没过多长时间,大家都不用了,只用自己的笔记本,所以不要把钱花在硬件上"。我竟无言以对。。。但是Research还是要做,我就一狠心买了个Titan-ZGPU,大概花了博士一个月的工资,然后就有了下面这张图:那时候还没有eGPU,我就自己搞了个解决方案,用一个外置台式机电源带动thunderbolttoPCIe的转接器。有了这些“装备”之后,我就开始了调参的不归路。比较早入坑,16年用MatConvNet复现了一下ResNetzhanghang1989/ResNet-Matconvnet,然后用ResNet提了下feature,比较容易水paper。

  • 使用Docker镜像

    写在前面镜像是Docker三大核心概念中最重要的一部分,而Docker运行容器前需要本地存在对应的镜像,如果镜像不存在,Docker会尝试从默认的镜像仓库中下载(默认使用DockerHub公共注册服务器的仓库),用户也可以通过配置来使用自定义的镜像仓库,笔者在前面就自定义了镜像仓库。既然镜像这么重要,那么本篇就围绕镜像这一核心概念来具体介绍相关操作:(1)如何使用pull命令从DockerHub仓库中下载镜像到本地;(2)如何查看本地已有的镜像信息和管理镜像标签;(3)如何在远端仓库中使用search命令进行搜索和过滤;(4)如何删除镜像标签和镜像文件;(5)如何创建用户定制的镜像并且保存为外部文件;(6)如何往DockerHub仓库中推送自己的镜像。获取镜像镜像是运行容器的前提,因此首先是需要获取镜像,开发者可以使用docker[image]pull命令直接从官方的DockerHub网站上进行获取,该命令的格式为docker[image]pullNAME[:TAG],其中NAME是镜像仓库名称,用来区分镜像,而TAG则是镜像的标签,一般用来表示版本信息,因此通常情况下描述一个镜像需要

  • 如果简化stm32中printf函数的使用——首先重定向

    STM32单片机极简方法使用宏定义代替复杂的重定向printf()函数,实现串口打印。(HAL库例程)https://blog.csdn.net/wu10188/article/details/97786989这个方式有助于编写好的工程。stm32添加串口调试https://blog.csdn.net/dream_feng/article/details/83504862按照这个方式,添加成功。首先在stm32中添加SWO输出功能,在uart.c中添加如下代码,作为printf的重定向。#ifdef__GNUC_ #definePUTCHAR_PROTOTYPEint__io_putchar(intch) #else #definePUTCHAR_PROTOTYPEintfputc(intch,FILE*f) #endif #ifdefSWO_PRINTF PUTCHAR_PROTOTYPE { ITM_SendChar(ch); returnch; } #else //重定义fputc函数 PUTCHAR_PROTOTYPE { RS485PA8_TX; HAL_UART_Tran

  • 顶端迭代器

    顶端迭代器给定一个迭代器类的接口,接口包含两个方法:next()和hasNext()。设计并实现一个支持peek()操作的顶端迭代器--其本质就是把原本应由next()方法返回的元素peek()出来。示例假设迭代器被初始化为列表[1,2,3]。 调用next()返回1,得到列表中的第一个元素。 现在调用peek()返回2,下一个元素。在此之后调用next()仍然返回2。 最后一次调用next()返回3,末尾元素。在此之后调用hasNext()应该返回false。复制题解/** *//ThisistheIterator'sAPIinterface. *//Youshouldnotimplementit,orspeculateaboutitsimplementation. *functionIterator(){ *@return{number} *this.next=function(){//returnthenextnumberoftheiterator *... *}; * *@return{boolean} *this.hasNext=function(){//retu

  • CSS3 transition动画

    仅供学习,转载请注明出处 CSS3transition动画1、transition-property设置过渡的属性,比如:widthheightbackground-color 2、transition-duration设置过渡的时间,比如:1s500ms 3、transition-timing-function设置过渡的运动方式,常用有linear(匀速)|ease(缓冲运动) 4、transition-delay设置动画的延迟 5、transition:propertydurationtiming-functiondelay同时设置四个属性单纯看上面的参数可能不太理解,下面来写个div的动画变化示例来看看。先写一个div 再写一个hover事件,当鼠标移动上去的时候,设置with:500px 写了hover事件之后,鼠标只要移动上去,div立即就变长了。然后鼠标移开,div立即变回去。 这个过程非常快,没有任何过渡的感觉。那么能否写个过渡的感觉出来呢?transition:propertyduration先用动画的前两个参数设置动作时长 设置动作为width变化宽度,时长为1秒,此

  • Android之Fragment

    什么是Fragment  自从Android3.0中引入fragments的概念,根据词海的翻译可以译为:碎片、片段。其目的是为了解决不同屏幕分辩率的动态和灵活UI设计。大屏幕如平板小屏幕如手机,平板电脑的设计使得其有更多的空间来放更多的UI组件,而多出来的空间存放UI使其会产生更多的交互,从而诞生了fragments。  fragments的设计不需要你来亲自管理viewhierarchy的复杂变化,通过将Activity的布局分散到frament中,可以在运行时修改activity的外观,并且由activity管理的backstack中保存些变化。当一个片段指定了自身的布局时,它能和其他片段配置成不同的组合,在活动中为不同的屏幕尺寸修改布局配置(小屏幕可能每次显示一个片段,而大屏幕则可以显示两个或更多)。  Fragment必须被写成可重用的模块。因为fragment有自己的layout,自己进行事件响应,拥有自己的生命周期和行为,所以你可以在多个activity中包含同一个Fragment的不同实例。这对于让你的界面在不同的屏幕尺寸下都能给用户完美的体验尤其重要。Fragment

  • 贝叶斯神经网络(系列):第二篇

    本文为AI研习社编译的技术博客,原标题: BayesianNeuralNetworkSeriesPost2:BackgroundKnowledge 作者|KumarShridhar 翻译|微白o 校对|酱番梨审核|约翰逊·李加薪整理|立鱼王 原文链接: https://medium.com/neuralspace/bayesian-neural-network-series-post-2-background-knowledge-fdec6ac62d43这是贝叶斯卷积网络系列八篇中的第二篇文章。如需查看第一篇文章,请点击:贝叶斯神经网络(系列)第一篇让我们将贝叶斯神经网络分解成贝叶斯和神经网络来开始。贝叶斯推断是概率论和统计学机器学习中的重要组成部分。它是基于由著名统计学家托马斯贝叶斯给出的贝叶斯定理。在贝叶斯推断中,随着更多证据或信息的出现,假设概率得到更新。另一方面,神经网络可以被认为是模仿人类大脑的端到端系统或一组算法(不是每个人都相信,但它是基础),并试图在数据集中学习复杂的表示来输出结果。神经网络神经网络上已有非常好的教程。我会试着简要介绍一下神经网络与大脑的类比,并着重解释

  • 虚拟货币发行、交易与融资法律问题研究报告

  • 大数据周周看 | 行业大牛不甘平淡忙创业,戴尔天价收购背后竟是数千人的失业判决书

    <数据猿导读>Dell公司宣布裁员至少两千人;紫光股份与西部数据拟出资10亿元建立大数据公司;原中国移动研究院专家王帅宇加盟北京供销大数据集团,出任CTO一职……以下为您奉上更多本周大数据热点事件来源:数据猿作者:abby 热点一、Dell公司宣布裁员至少两千人,弥补科技史上最大并购案背后的巨额债务本周我们报道了Dell以670亿美元巨资收购了数据存储公司EMC的消息,这次合并可谓是真正意义上的强强联合,且交易金额一举打破科技史上最大并购记录。但这天价收购案的背后,却让戴尔背负了400多亿美元的巨额债务。因此双方不得不以裁员的方式削减成本。据戴尔方面回应,本次裁员人数将在2000-3000人左右,其中销售、供应链、市场、行政等部门将成为裁员的重灾区,预计可帮助公司节省近17亿美元成本。然而依靠裁员来填400多亿美元的大坑终究是杯水车薪,未来戴尔将把重心放在云计算与存储领域,争取早日获得盈利。二、紫光股份与西部数据拟出资10亿元建立大数据公司9月8日消息,“紫光西部大数据公司”已于近日在南京秦淮技术园正式完成揭牌仪式。据了解,紫光西部成立于2016年3月,是由紫光集团旗下紫光

  • 机器学习精华,10问10答

    给新人的学习建议 1.你建议其他领域的人(比如机械工程)来学习机器学习吗?IanGoodfellow:当然了!我最崇拜的GeoffreyHinton在博士阶段研究领域是实验心理学!通常而言,我们发现某一领域的变革往往是因为另一个领域的人带来了其领域中已成型的新想法!2.一个几乎没有任何技术背景的人怎么学习机器学习?IanGoodfellow:你应该要掌握一些基本的线性代数、概率和python的编程知识!但是你不必知道所有的线性代数知识,所有的概率论知识,或者所有python编程的知识(实际上一些很晦涩难度的语言特性在一些公司是被禁用的)。我觉得你应该从学习足够的线性代数、概率论和python编程做起,目标是你可以只用python和numpy库实现逻辑回归!通过阅读我的深度学习那本书的第一章到第五章,你就能学到完成逻辑回归编写所需的所有知识了,python的部分除外。当然我很难说这是否可行,因为我很难把自己放在一个没有任何技术背景的人的角度去考虑,但是我们已经尝试在书里放入了足够多的细节,所以你应该是没问题的。你需要一些耐心和努力,从零开始学习知识!3.作为一个大二学生,我该如何进入人工

  • 腾讯云DDoS高防IP功能相关问题

    DDoS高防IP支持腾讯云外用户接入防护吗?支持。DDoS高防IP可以防护任何公网服务器,包括但不限于在腾讯云、其他的云、IDC机房等。 注意: 在中国大陆地区接入的域名必须按照工信部要求进行ICP备案。如果域名未备案,将不能提供DDoS高防服务。 DDoS高防IP是否支持泛域名?DDoS高防IP网站业务转发规则配置中,支持对泛域名进行防护。泛域名解析是指利用通配符(*)作为次级域名,以实现所有的次级域名均指向同一IP。例如,支持配置*.tencent.com。 DDoS高防IP安全防护策略中行为模式分析,具体是指什么行为模式?行为模式分析主要包括查看是否有攻击特征的报文,查看是否有攻击不符合协议规范的报文,以及查看是否有异常连接攻击的特征等。您可根据业务特点灵活设置,应对不断变化的攻击手法,设置详情请参见防护配置。 DDoS高防IP服务是否会自动将回源IP地址加入安全组?不会。用户需手动将回源IP段添加至CVM安全组中。若用户在源站部署了防火墙或其它主机安全防护软件,也需将回源IP段添加至相应的白名单中,防止将高防回源IP拦截或限速导致业务流量受损。 DDoS高防IP中的

  • 操作

          $("#txx").datagrid({nowrap:false,idField:"id",rows:mydata,fit:true,rownumbers:true,singleSelect:true,pagination:true,pageList:[20,50,100],onDblClickRow:queryInfo,onClickRow:queryan,remoteSort:false,height:200,columns:[[复制 {field:'SCZT',title:"状态",align:"center",width:70},{field:'ID',title:'操作',width:'35%',align:'center',formatter:formatOper}复制 ]]});复制 复制 functionformatOper(val,row,index){ return'<inputtype="button"onclick="remove(\''+row["PID"]+'\')"value="校验"/> 

  • 从2011年用工荒现象看中国人口结构的周期波动

    分析劳动力市场的供求关系必然要研究每年有多少年轻人走出校门并开始寻找工作。 有人指出:“‘用工荒’在2011年春天变得异常显眼的另一个原因是大约20年前生育率的大幅下降。要保持劳动力规模长期不萎缩(产业升级期间光不萎缩还不够),一个国家的人口总和生育率应该达到世代更替水平,这在发达国家是2.09,在中国这样一个性别比失衡的半发展中国家可能需要2.3。 根据2000年第五次全国人口普查的数据,中国的总和生育率在1990年还是2.37,但1991年已经下降到1.8,1992为1.68,1993为1.57,1994为1.47,1995为1.48,1996为1.36,1997为1.31,1998为1.31,1999为1.23,2000为1.22。这表明‘用工荒’在中国将是长期的,而且有愈演愈烈之趋势。”这种说法有道理。1991年出生的人到2011年满20岁,刚好是要走上工作岗位的年龄。从1991年到2000年,中国的生育率逐年下降,使得20年后新增劳动力的数量相应减少。因此,有必要全面地综合考虑计划生育政策,适度放宽一胎化政策,努力保持劳动力市场的相对均衡。 有人从人口红利的角度分析民工荒。如

  • OpenCV笔记(十一)——图像的阈值操作(一种分割的方法)

    对图像进行阈值的操作,可以认为是一种简单的分割前景和背景的方法。 这种分割的方法一般用在前景像素和背景像素的强度值反差比较明显的情况下,如下图: 我们可以看到这幅苹果的图像,代表前景的是苹果,代表背景的是白色部分。这幅图像前景背景分明,所以可以取一个阈值,如200。在图像中,凡是灰度低于200的像素,我们认作是前景,将其值设为255,凡是灰度不低于200的像素,我们认作是背景,将其值设为0。获得一张新的Mask,将原始的图像与这张Mask做与(&)运算,就能够得到分割好的图像。   一般来说,阈值化的手段有以下五种: 1.ThresholdBinary 2.ThresholdBinary,Inverted 3.Truncate 4.ThresholdtoZero   5.ThresholdtoZero,Inverted   我们根据不同的实际需要,灵活利用上述的5种阈值化的方法。   在OpenCV中,提供了threshold函数来实现阈值化的功能: double threshold(InputArray

  • 阻塞和非阻塞,同步和异步

    阻塞和非阻塞,同步和异步 1例子 故事:老王烧开水。 出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。 老王想了想,有好几种等待方式 1.老王用水壶煮水,并且站在那里,不管水开没开,每隔一定时间看看水开了没。-同步阻塞 老王想了想,这种方法不够聪明。 2.老王还是用水壶煮水,不再傻傻的站在那里看水开,跑去寝室上网,但是还是会每隔一段时间过来看看水开了没有,水没有开就走人。-同步非阻塞 老王想了想,现在的方法聪明了些,但是还是不够好。 3.老王这次使用高大上的响水壶来煮水,站在那里,但是不会再每隔一段时间去看水开,而是等水开了,水壶会自动的通知他。-异步阻塞 老王想了想,不会呀,既然水壶可以通知我,那我为什么还要傻傻的站在那里等呢,嗯,得换个方法。 4.老王还是使用响水壶煮水,跑到客厅上网去,等着响水壶自己把水煮熟了以后通知他。-异步非阻塞 老王豁然,这下感觉轻松了很多。 同步和异步 同步就是烧开水,需要自己去轮询(每隔一段时间去看看水开了没),异步就是水开了,然后水壶会通知你水已经开了,你可以回来处理这些开水了。 同步和异步是相对于操作结果来说,会不会等待

  • 切换页面保存页面原有的位置信息keep-alive savedPosition meta

    1只有在mode:'history'模式生效;savedPosition,这个功能只在支持history.pushState额浏览器中可用。(通过浏览器的前进/后退按钮触发) newRouter({ scrollBehavior(to,from,savedPosition){ if(savedPosition){ returnsavedPosition }else{ return{x:0,y:0} } } })复制 2切换菜单过程中保留原页面的位置信息,结合keep-alive和路由元信息 <keep-alive>//缓存组件跳转的页面   <router-viewv-if="$route.meta.keepAlive"class="ui-view"></router-view> </keep-alive> //非缓存组件跳转页面 <router-viewv-if="!$route.meta.keepAlive"class="ui-view"></router-view> 路由元信息中保存页面的滚动信息 ne

  • (架构)React Native 导出项目全局共用组件的模块

    自定义组件全局使用(类似如下) import{ReactNavComponent,Widget,Util}from'rn-yunxi'; const{RegexpUtil,StorageUtil}=Util; const{Button,Text}=Widget;复制 首先在项目中文件下新建rn-yunxi文件夹,然后再package.json文件中导入“rn-yunxi”:“file:./rn-yunxi”, "dependencies":{ "antd-mobile":"^1.4.2", "autobind-decorator":"^2.1.0", "events":"^1.1.1", "mobx":"^3.3.1", "mobx-react":"^4.3.4", "rc-form":"^1.3.1", "react":"16.0.0-alpha.6", "react-native":"file:../rn-yunxi/react-native", "rn-yunxi":"file:./rn-yunxi", "vdjs":"^1.0.0" }, 复制 然后在rn-yunxi声

  • CSS3美化表单控件

    CSS3美化表单控件 2016-06-2818:14by图书馆的牧羊人,582阅读,9评论,收藏, 编辑 表单的默认控件在不同的浏览器中的样式不同,用户体验很差。用CSS3可以实现表单控件的美化,可以提供更好的用户体验。不足之处就是浏览器的兼容性问题。 一.下拉控件 效果图: 下拉控件的布局结构: <divclass="container"> <divclass="select"> <p>所有选项</p> <ul> <liclass="selected"data-value="所有选项">所有选项</li> <lidata-value="Python">Python</li> <lidata-value="Javascript">Javascript</li> <lidata-value="Java">Java</li> <lidata-value="Ruby">Ruby</li> <

  • java中的==、equals()、hashCode()源码分析(转载)

    在java编程或者面试中经常会遇到==、equals()的比较。自己看了看源码,结合实际的编程总结一下。 1.==    java中的==是比较两个对象在JVM中的地址。比较好理解。看下面的代码: 1publicclassComAddr{ 2publicstaticvoidmain(String[]args)throwsException{ 3Strings1="nihao"; 4Strings2="nihao"; 5Strings3=newString("nihao"); 6System.out.println(s1==s2);//true 7System.out.println(s1==s3);//false 8} 9}复制   上述代码中:   (1)s1==s2为true,是因为s1和s2都是字符串字面值"nihao"的引用,指向同一块地址,所以相等。   (2)s1==s3为false,是因为通过new产生的对象在堆中,s3是堆中变量的引用,而是s1是指向字符串字面值"nihao"的引用,地址不同所以不相等。 2.equals()    equ

相关推荐

推荐阅读