java des解密,编程实现des算法的加密解密过程

  java des解密,编程实现des算法的加密解密过程

  工作中遇到的Des解密问题需要我们对第三方发来的数据进行解密,但是解密结果的前几位总是乱码。经过半天的努力,终于找到了问题所在。

  先介绍一下des。懂des的同学可以直接看下面的解法。

  Des加密

  DES称为数据加密标准(Data EncryptionStandard),即数据加密标准。Des加密算法是一种对称加密算法。所谓对称加密算法,就是用同一个密钥加密明文和解密密文。

  Des使用一个56位密钥和一个附加的8位奇偶校验位来生成最大64位的数据包。这是一种迭代分组密码,使用一种称为Feistel的技术,其中加密的文本块被分成两半。使用subkey对其中一半应用loop函数,然后将输出与另一半进行XOR运算;然后交换两半,这个过程会继续,但最后一个循环不会交换。DES使用16个周期,并使用四种基本运算:异或、替换、替代和移位。

  特点:数据加密标准,速度快,适合加密大量数据。

  Des算法有三个入口参数:Key、Data和Mode。

  Key: 8字节,共64位。根据Des算法,第8、16、24,第64位是奇偶校验位,不参与Des运算,所以常说Des的密钥是56位。在Des加密和解密过程中,密钥的长度必须是8字节的倍数。

  数据:8字节64位,是要加密解密的数据。

  模式:工作模式:Des:加密和解密。

  Des加密模式

  des的加密方式主要有CBC方式和ECB方式,加密方式不同。

  ECB模式指的是电子码本模式,是最古老也是最简单的模式。它将加密的数据分成若干组,每组的大小与加密密钥的长度相同。然后,用相同的密钥对每个组进行加密。如果最后一个数据包的长度小于64位,则应填入64位。

  欧洲央行模式的特点是:

  密钥、明文和密文的长度每次必须为64位;

  不需要检测数据块的重复排序;

  相同的明文块(使用相同的密钥)产生相同的密文块,容易受到字典攻击;

  一个错误只会影响一个密文块;

  CBC模式是指加密的区块链模式。与ECB模式最大的区别是增加了初始向量。

  CBC模式的特点是:

  每次加密的密文长度为64位(8字节);

  当相同的明文使用相同的密钥和初始向量时,CBC模式总是产生相同的密文;

  密文块依赖于之前的运算结果,所以密文块不能重排;

  采用不同的初始化向量可以防止相同的明文产生相同的密文,在一定程度上可以抵抗字典攻击。

  出现错误后,当前和未来的密文都会受到影响;

  填充方法

  常见的填充方法PKCS5Padding,PKCS5Padding是指数据位数不足时要采用的数据填充方法,也可称为数据填充法。PKCS5Padding,一种填充方法,具体是“填充的数字代表填充的字节总数”

  比如两个字节的差是# # # # 22,五个字节的差是# # # 5555,就可以根据最后一个知道填充的个数和数量。

  确保加密和解密的一致性# #

  在不同的平台上,只要这些参数一致,就可以达到加解密的一致性。

  加密和解密密钥是一致的。

  当采用CBC模式时,初始向量应该是一致的。

  采用相同的填充模式。

  python中的Des加密

  在python中,我们使用pyDes对数据进行Des加密:

  # pyDes.des(键,[模式],[IV],[焊盘],[焊盘模式])

  密钥:加密和解密密钥:des。

  模式:加密模式:支持CBC和ECB模式。

  IV:初始化向量,CBC模式专用,长度为8字节。使用不同的初始化向量进行加密,可以避免密文相同,在一定程度上抵抗字典攻击。

  Pad:当padmode设置为PAD_NORMAL时,PAD参数用于指定填充方法。

  Padmode:填充模式,默认为PAD_PKCS5填充模式。

  例子

  -

  来自pyDes进口公司*

  data=请加密我的数据

  k=des(DESCRYPT ,CBC, \0\0\0\0\0\0 ,pad=None,padmode=PAD_PKCS5)

  #对于Python3,你需要使用字节,例如:

  # data=b 请加密我的数据

  # k=des(bDESCRYPT ,CBC,b\0\0\0\0\0\0 ,pad=None,padmode=PAD_PKCS5)

  加密(数据)

  “打印”加密:% r“% d

  “print”解密:% r“% k . decrypt(d)

  assert k.decrypt(d,padmode=PAD_PKCS5)==data

  在des加密(CBC模式)之后,相同的密钥、初始向量和填充模式被用于解密。解密字符的前几位是乱码,其他位正常。

  des_key=ucgtchdp

   12345678

  k=des(des_key,mode=CBC,IV=12345678 ,padmode=PAD_PKCS5)

  通过的加密数据:xujw 0 io 7 uhymz h/VB 9 kvhubiaev 4k ZZ

  k解密的数据:@ idx _ \ x10ys强大

  这通常发生在不同语言(java加密,python解密)对初始向量的处理方式不同,导致解密不完全的时候。

  解答:检查初始向量的表示。

  k1=des(des_key,mode=CBC,IV=\1\2\3\4\5\6\7\x08 ,padmode=PAD_PKCS5)

  k1解密的数据:python很强大

  好吧!

  请注明出处~

  Loadrunner11无法在64位win7上启用ie解决方案

  Loadrunner11无法在64位win7上启用ie。解决方案1.loadrunner11默认在win7 64位上启用32位IE浏览器。路径:C:\Program Files (x86).

  使用virtualbox安装centos虚拟机,以及VirtualBox无法安装64位Linux CentOS的解决方案。

  我以前一直使用vmware的虚拟机。嗯,其实一直盗版他们不好,然后想用centos造点东西。因此,在vmare上安装centos总是会出现一些问题。看了人家给的建议,我就转用virtualbox,虽然virtualbo.

  Ubuntu 13period无法安装0 64位ia32-libs解决方案。

  安装新的立德软件包管理器:打开终端,输入以下命令:sudo apt-get install synaptic打开新的立德软件包管理器,在AP中选择“设置软件库”和“添加其他软件”。

  PlDeveloper无法连接到64位Oracle 10g的解决方案

  下载即时客户端-Basic-Win32-10.2.0.4.zip假设Oracle 10g的安装目录为D:\oracle\product\10.2.0\db1。第一,瞬间TC.

  Cnum用DES加密JAVA,用DES解密JAVA,用DES加密Cnum用DES实现解密

  这里贴的是一般的C#和jav DES加密类。希望可以直接复制给大家,这样我就可以用C#DES加解密类///

  使用Cnum解密java DES加密字符串

  最近需要用C#的DES解密工具类来解密字符串,但是要解密的字符串是用java加密的。我上网查了一下C#和java关于DES加密解密的资料,发现可以互相加密。

  微信小程序des加密,PHP des解密

  最近在对小程序传输的数据进行加密。加密方式有很多种,des对称加密采用CBC方式。引用的插件是tripledes.js,https://github.com/favour111in/h.

  AES破解微信非法密钥长度错误的三种解决方案

  AES解密并报告错误非法密钥大小Java环境Java版本 1.8.0 _ 151 Java (TM) se运行时环境.

  64位Ubuntu运行32位程序时,文件中没有lpar没有这样的文件或目录;解决问题的方法

  当我尝试在64位Ubuntu下运行32位程序时,我一直说文件不存在(没有这个文件或目录)。我就想说,为什么不直接说文件格式不正确?不得不说一档不存在!真实的.

  随机推荐

  使用前端js读取文件

  同时,最近问js能不能读取本地文件:想起了之前的一篇关于js读取本地文件的文章,然后写了一个demo。ps:有点像Java的IO流,但是有区别。首先,我们定义一个输入标签type=.

  astastastLinux文件夹文件的创建、删除和重命名

  Linux删除文件夹命令Linux删除目录非常简单。很多人还是习惯使用rmdir,但是一旦目录不为空,就会深陷苦恼。现在,只需使用rm -rf命令。直接用rm就行了,但是你要加两个参数——RF,也就是rm。

  MyISAM和InnoDB的区别

  MyISAM和InnoDB解释InnoDB和MyISAM是很多人使用MySQL时最常用的两种表类型。这两种表类型各有优缺点,具体取决于具体的应用。基本区别在于MyISAM类型不支持高级处理,如事务处理。

  [转]system period;DateTimeperiod周期;现在时期;ToStringlparrpar的一些用法

  # C//2007年4月24日this . textbox 6 . text=system . datetime . now . tostring( d )中的日期处理函数;

  Hibernate环境建设

  Hibernate工作流1。创建项目并指导包2。在src的根目录下创建一个配置文件:hibernate.cfg.xml(也可以在src的其他文件夹下创建,但是在后面的配置中需要注明路径)?x.

  Python网络编程的Socket文章

  1插座?呵呵,想多了,翻译过来就是插座的意思!网络套接字是用于发送或接收数据的内部端点.

  wget命令行在本地克隆一个网站。

  命令:wget-k-p-NH-n http://www . Baidu . com-k将下载文件中的所有链接转换为本地引用,而不是依赖于原创或在线内容-p下载所有必需的文件以确保离线可用,包.

  北京大学冯喆清北学校讲座第一天

  贪婪方案:答案是第三种策略二分法的重点之一是顺序。只有满足这一项,才能用二分法判断区间。否则,你必须构建自己的序列。洛古跳石同题:首先我们要最小化最大跳远距离代码如下(本题)#include.

  archlinux下的我的软件列表

  编辑:leafpad、gvim终端:zsh、xfce 4-终端音乐:网易云音乐(良心)、DeadBeef(类似win的foobar2000)视频播放:mpv PDF:Acrore.

  学习笔记TF 047冒号;操场、冲浪板

  PlayGround.http://playground.tensorflow.org。教学目的:简单的神经网络在线演示。实验图形平台。可视化神经网络训练过程。在浏览器中训练神经网络。接口,数据(DAT.

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: